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 <root@magneto.giveforward.com>
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
, я не получаю коммит ' ветвь слияния' превращается 'в панель инструментов ' .. Как бы я откатил это слияние назад?
Ответы:
Отмена фиксации слияния была подробно рассмотрена в других вопросах. Когда вы выполняете ускоренное слияние, второе, которое вы описываете, вы можете использовать
git reset
для возврата в предыдущее состояние:Вы можете найти
<commit_before_merge>
сgit reflog
,git log
или, если вы чувствуете смятение (и больше ничего не сделали):git reset --hard HEAD@{1}
источник
reflog
спасатель.HEAD@{1}
просто описывает второе самое последнее состояние HEAD, или более технически: «Ссылка, за которой следует суффикс @ с порядковым номером, заключенным в пару скобок (например, {1}, {15}), указывает n-е предшествующее значение этого исх «.Отсюда:
http://www.christianengvall.se/undo-pushed-merge-git/
Git revert добавляет новый коммит, который откатывает указанный коммит.
Использование -m 1 говорит о том, что это слияние, и мы хотим откатиться до родительского коммита в главной ветви. Вы должны использовать -m 2, чтобы указать ветку разработки.
источник
here
ссылка в комментарии @Hilikus больше не действительна. Сайт утверждает, что контент был перенесен в книгу ( git-scm.com/book/en/v2 ), но если это так, то найти его там нетривиально.Просто сбросьте коммит слияния с
git reset --hard HEAD^
.Если вы используете --no-ff, git всегда создает слияние, даже если вы ничего не делаете между ними. Без --no-ff git просто сделает перемотку вперед, что означает, что для ваших веток HEAD будет установлено значение HEAD объединенной ветки. Чтобы решить эту проблему, найдите идентификатор фиксации, к которому вы хотите вернуться и
git reset --hard $COMMITID
.источник
Но могут иметь неожиданные побочные эффекты. См
--mainline parent-number
вариант в git-scm.com/docs/git-revertВозможно, грубым, но эффективным способом было бы проверить левого родителя этого коммита, сделать копию всех файлов,
HEAD
снова оформить заказ и заменить все содержимое старыми файлами. Затем git скажет вам, что откатывается, и вы создадите свой собственный возвратный коммит :)!источник
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
git reset
что это решение, но также упоминаете, что оно может иметь неожиданные побочные эффекты. Тем не менее, эта ссылка отgit revert
, а неgit reset
:)git revert
нетgit reset
Если вы слили ветвь, то отменили слияние, используя запрос на извлечение, и объединили этот запрос на откат для возврата.
Самым простым способом, который я чувствовал, было:
git revert -m 1 xxxxxx
(если возврат был объединен с использованием ветви) или используя,git revert xxxxxx
если это был простой возвратисточник