Связанные ветки в Git
Когда я использовал gitk для проверки своих веток, я обнаружил следующее:
я создал pretty_url
, переключился на него, работал на вещи, совершил, затем переключился на master
ветка (которая была чистой), затем побежал git merge pretty_url
и проверил с gitk
и нашел это.
Я уверен, что это не правильно и, вероятно, master
не был чистым Как я могу это исправить?
2 ответа
Это именно то, что вы должны ожидать от слияния. Если вы хотите сделать перебаз и перемотать вперед, вы могли бы сделать это вместо этого и иметь прямую линию.
Пример:
До слияния у вас была такая ситуация:
То есть история master
а также branch
расходились. Они делят h
как общий предок. При слиянии (через git merge branch
в то время как на `master) вы получаете коммит с двумя родителями для объединения этой истории:
Если это не то, что вы хотели, вы можете отменить это и получить то, что вы хотели, сделав что-то вроде:
git reset --hard HEAD@{1} # or whatever commit matches 'j' to undo the merge
git checkout branch
git rebase master # incorporate 'i' and 'j' commits into 'branch'
git checkout master
git merge branch # this merge will be a fast-forward now
Что даст вам перебазированную линейную историю, которую вы, похоже, ищете:
Красная линия не указывает на нечистую ветвь; это просто означает, что предыдущий коммит в master
старше чем pretty_url
голова Не нужно беспокоиться здесь. Более того, git merge
не работает на нечистых деревьях.