Git Revert Merge - ни одна магистраль не выглядит правильно - PullRequest
2 голосов
/ 27 сентября 2010

Я пытаюсь отменить ошибочное слияние, но изменения от обеих команд выглядят неправильно.

Вот как я сделал коммит слияния:

# merge master into branch:
git checkout branch
git merge master
# resolve conflicts
git commit
git push

Теперь яхочу отменить это слияние с помощью:

git log b2e
  commit b2e...
  Merge: de9... cf4...
git revert -m 1 -n b2e

Проблема в том, что git status показывает, что это только отменит разрешенные мной конфликты, а не все слияние.Команда git revert -m 2 -n b2e отменяет изменения, внесенные в ветку перед слиянием, чего я тоже не хочу.

Второй вопрос: как показать, что было изменено в коммите слияния?

git show b2e      # only shows the conflicts I resolved
git diff b2e de9  # does the same
git diff b2e cf4  # shows what is different between the branch and master

Обновление: коммит de9 был верным, и git diff b2e de9 показывает, что было зафиксировано.Одна из причин, по которой я был сбит с толку, заключалась в том, что конфликт удаления / сохранения не отображался в diff, поэтому я подумал, что были изменения, которые git не показывал мне.изменение до cf4, фиксация от master, смутило меня еще больше, потому что я не совсем понимал, что происходит.Нет необходимости отвечать на этот вопрос.

1 Ответ

1 голос
/ 28 сентября 2010

Git revert может быть не то, что вы хотите сделать.Самый простой способ вернуться туда, где вы были до слияния, - вместо этого запустить git reset --hard HEAD^ (или использовать SHA1 коммита, к которому вы хотите вернуться, вместо HEAD^), особенно если вы работаетепо своему усмотрению, или если вы еще не выдвинули свое слияние и / или не вернулись.Если вы отменяете слияние с помощью revert, вы можете столкнуться с ситуацией, в которой вы не сможете легко повторно слить коммиты, которые вы отменили, сам откат записывается как новый коммит, и обычно он может быстро запутаться.Смотрите здесь примеры и стратегии: http://progit.org/2010/03/02/undoing-merges.html

...