Откат 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 скажет вам, что откатывается, и вы создадите свой собственный возвратный коммит :)!