С SVN легко выполнить обратное слияние коммита, но как это сделать с Git?
С SVN легко выполнить обратное слияние коммита, но как это сделать с Git?
Ответы:
Чтобы создать новую фиксацию, которая «отменяет» изменения прошлой фиксации, используйте:
$ git revert <commit>
Также возможно фактически удалить фиксацию из произвольной точки в прошлом, перебазировав ее и затем сбросив, но вы действительно не хотите этого делать, если вы уже отправили свои коммиты в другой репозиторий (или кто-то другой снял с вас) ,
-m <parent number>
параметр, git revert
чтобы указать, какое изменение нужно отменить. Если вы хотите отменить слияние неопубликованной истории, используйте git reset --hard HEAD^1
.
-m
означает, что будущее слияние из неслитой ветки не будет включать изменения, сделанные до этого слияния! См. Schacon.github.com/git/howto/revert-a-faulty-merge.txt, чтобы узнать о правильных способах повторного слияния неслитой ветки.
Чтобы вернуть слияния коммит, вы должны использовать: 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: http://schacon.github.com/git/git-merge.html
обсуждение слияния git (запутанное, но очень подробное): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
git show <merge commit SHA1>
чтобы увидеть родителей, нумерация - это порядок, в котором они появляются, напримерMerge: e4c54b3 4725ad2
git revert -m 1 SHA1
Эта команда сработала для меня, чтобы отменить фиксацию слияния, которая была несколькими коммитами слияния до начала и имела много коммитов ниже.
git reset --hard HEAD^
Используйте указанную выше команду, чтобы отменить изменения слияния.
Если вы не хотите совершать фиксацию или хотите выполнить фиксацию позже (для вас все равно будет подготовлено сообщение фиксации, которое вы также можете отредактировать):
git revert -n <commit>