Как отменить мерзавец слияния с конфликтами - PullRequest
697 голосов
/ 21 апреля 2011

Я нахожусь на ветке mybranch1. mybranch2 разветвляется от mybranch1, и изменения были внесены в mybranch2.

Затем, пока на mybranch1, я сделал git merge --no-commit mybranch2 Это показывает, что при слиянии были конфликты.

Теперь я хочу отменить все (команда merge), чтобы mybranch1 вернулся к тому, что было раньше. Я понятия не имею, как мне поступить об этом.

Ответы [ 3 ]

1227 голосов
/ 21 апреля 2011

Последний Git:

git merge --abort

Эта попытка восстановить вашу рабочую копию до того состояния, в котором она находилась до слияния.Это означает, что он должен восстановить любые незафиксированные изменения до слияния, хотя он не всегда может делать это надежно.Как правило, вы не должны сливаться с незафиксированными изменениями в любом случае.

До версии 1.7.4:

git reset --merge

Это более старый синтаксис, но работает так же, как указано выше.

До версии 1.6.2:

git reset --hard

, которая удаляет все незафиксированные изменения, включая незафиксированное слияние.Иногда такое поведение полезно даже в более новых версиях Git, которые поддерживают вышеуказанные команды.

105 голосов
/ 09 июня 2014

На самом деле, стоит заметить, что git merge --abort эквивалентно только git reset --merge, если присутствует MERGE_HEAD.Это можно прочитать в справке git для команды слияния.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

После неудачного слияния, когда нет MERGE_HEAD, неудачное слияние можно отменить с git reset --merge, но необязательно с git merge --abort, так что это не только старый и новый синтаксис для одной и той же вещи .

Лично я считаю git reset --merge гораздо более полезным в повседневной работе.

102 голосов
/ 21 апреля 2011

Если вы используете последнюю версию git,

git merge --abort
...