Откат a Git слияние

develop branch
--> dashboard (working branch)

Я использую git merge --no-ff develop для слияния любых восходящих изменений в панель

git log:

commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date:   Mon Jul 30 08:16:46 2012 -0500

    Merge branch 'develop' into dashboard

commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date:   Sun Jul 29 10:49:21 2012 -0500

    fixed end date edit display to have leading 0

commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date:   Sun Jul 29 09:13:24 2012 -0500

В слиянии было около 50+ коммитов, и мне интересно, как просто вернуть слияние, поэтому панель инструментов возвращается к предварительному слиянию состояний

Вторая часть этого, если я не собираюсь объединиться с --no-ff, я не получаю commit Объединить ветвь 'develop' в личную панель. Как мне перевернуть эту слить обратно?

Ответ 1

Возврат транзакции слияния исчерпывающе рассмотрен в других вопросах. Когда вы выполняете быстрое переключение, второе, которое вы описываете, вы можете использовать git reset для возврата в предыдущее состояние:

git reset --hard <commit_before_merge>

Вы можете найти <commit_before_merge> с помощью git reflog, git log или, если вы чувствуете moxy (и ничего не сделали): git reset --hard [email protected]{1}

Ответ 2

Отсюда:

http://www.christianengvall.se/undo-pushed-merge-git/

git revert -m 1 <merge commit hash>

Git revert добавляет новую фиксацию, которая откатывает указанную фиксацию.

Использование -m 1 сообщает, что это слияние, и мы хотим вернуться к родительскому фиксации на главной ветке. Вы должны использовать -m 2 для указания ветки разработки.

Ответ 3

Просто reset слияние с git reset --hard HEAD^.

Если вы используете --no-ff git, всегда создается слияние, даже если вы ничего не совершали между ними. Без --no-ff git будет просто делать перемотку вперед, то есть ваши ветки HEAD будут установлены в HEAD объединенной ветки. Чтобы решить эту проблему, найдите идентификатор commit, к которому вы хотите вернуться, и git reset --hard $COMMITID.

Ответ 4

git reset -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

Но могут иметь неожиданные побочные эффекты. Смотрите --mainline parent-number в git-scm.com/docs/git-revert

Возможно, грубым, но эффективным способом было бы проверить левого родителя этого коммита, скопировать все файлы, снова извлечь HEAD и заменить все содержимое старыми файлами. Затем git скажет вам, что откатывается, и вы создадите свой собственный возвратный коммит :)!