Прервать слияние Git

122

Я работаю над проектом, использующим Git в качестве VCS. Я получил ветку xyzот основной ветки мастера. Поработав некоторое время, я зафиксировал свой код и воспользовался основной веткой.

Тяга была в порядке. Затем я объединил код с мастером. После слияния в некоторых файлах возникли проблемы. Я не фиксировал код после слияния. Может ли кто-нибудь рассказать, как я могу прервать это слияние и привести мою ветку, в которой я работаю в настоящее время, в состояние, в котором она была до того, как я ее слил?

Салман Казми
источник
Разве нельзя просто восстановить предыдущую фиксацию ветки?
Wutipong Wongsakuldej
2
Возможный дубликат Как отменить слияние git при конфликтах
Скотт Велдон
1
Обратите внимание, что в Git revertэто имя команды, которая создает новую фиксацию, отменяя изменения в предыдущей фиксации, так что, вероятно, это не то слово, которое вы здесь ищете. Я отредактировал ваш вопрос, чтобы уточнить.
Скотт Велдон

Ответы:

305

пока вы не зафиксировали, вы можете ввести

git merge --abort

как и предполагалось в командной строке.

Тимоти Тракл
источник
4
Я получил это сообщение при попытке это: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs
1
@Ahmad git не запускает слияние с незафиксированными изменениями (уже отслеживаемых файлов) на месте. git не может защитить то, чего не знает.
Тимоти Тракл
да, я узнал это, потеряв свой код. вот подробности моей проблемы, как я попал в проблему. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ахмад
24

Если вы выполняете команду «git status» во время конфликта слияния, первое, что покажет вам git, - это как отменить слияние.

вывод статуса git при конфликте слияния

MLY
источник
Отлично, это подсказало мне, git reset HEAD <file>что эффективно удалил
сворачиваемый элемент
6

По правде говоря, в сети уже есть много-много ресурсов, объясняющих, как это сделать:

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

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

Отмена слияния , из блога Git (получено с Wayback Machine на archive.org)

Думаю, я просто резюмирую некоторые из них:

  1. git revert <merge commit hash>
    Это создает дополнительную фиксацию "отката", в которой говорится, что вы отменили слияние.

  2. git reset --hard <commit hash *before* the merge>
    Это сбросит историю до того, как вы сделали слияние. Если у вас есть коммиты после слияния, они вам понадобятся cherry-pickпозже.

Но, честно говоря, это руководство с диаграммами лучше всего, что я могу объяснить! :)

денис.лобанов
источник
1
Ссылка пропала. Вздох.
SMBiggs
@ScottBiggs Я думаю, они переместили его на git-scm.com/book/en/v2/… . Денис, если прочитаете, можете проверить? И если это действительно так, не могли бы вы обновить ссылку в своем ответе? Спасибо!
Фабио говорит: "Восстановите Монику"