Git: как выполнить обратное слияние фиксации?

С SVN легко свернуть-слияние фиксации, но как это сделать с помощью Git?

Ответ 1

Чтобы создать новую фиксацию, которая "отменяет" изменения прошлой фиксации, используйте:

$ git revert <commit>

Также можно фактически удалить фиксацию из произвольной точки в прошлом путем перезагрузки и затем сброса, но вы действительно не хотите этого делать, если вы уже подтолкнули свои фиксации к другому репозиторию (или кто-то еще нажал от вас).

Ответ 2

Чтобы отменить коммит слияния, вам нужно использовать: git revert -m <parent number>. Так, например, чтобы отменить самый последний коммит слияния, используя родительский номер с номером 1, вы бы использовали:

git revert -m 1 HEAD

Чтобы отменить коммит слияния перед последним коммитом, вы должны сделать:

git revert -m 1 HEAD^

Используйте git show <merge commit SHA1> чтобы увидеть родителей, нумерация - это порядок их появления, например, Merge: e4c54b3 4725ad2

документация по git merge: http://schacon.github.com/git/git-merge.html

обсуждение git merge (запутано, но очень подробно): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt

Ответ 3

Если вы правильно поняли, вы говорите о том, чтобы сделать

svn merge -rn:n-1

чтобы вернуться из более раннего фиксации, и в этом случае вы, вероятно, ищете

git revert

Ответ 4

git reset --hard HEAD^ 

Используйте приведенную выше команду для возврата изменений слияния.

Ответ 5

Если вы не хотите комментировать или хотите совершить позднее (сообщение фиксации по-прежнему будет подготовлено для вас, которое вы также можете редактировать):

git revert -n <commit>