回滚Git合并

时间:2012-07-30 13:24:45

标签: 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 <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合并,我不会将提交'合并分支'开发'到仪表板'。我怎么会合并后滚?

5 个答案:

答案 0 :(得分:199)

other questions. {{3}}当您执行快进合并时,您描述的第二个合并,您可以使用git reset返回到先前的状态:

git reset --hard <commit_before_merge>

您可以找到<commit_before_merge> git refloggit log,或者,如果您感觉到了moxy(并且没有做任何其他事情):git reset --hard HEAD@{1} < / p>

答案 1 :(得分:63)

从这里开始:

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

git revert -m 1 <merge commit hash>

Git revert添加了一个回滚指定提交的新提交。

使用-m 1告诉它这是一个合并,我们想要回滚到主分支上的父提交。您可以使用-m 2指定develop分支。

答案 2 :(得分:16)

只需使用git reset --hard HEAD^重置合并提交。

如果你使用--no-ff git总是创建一个合并,即使你之间没有提交任何东西。没有--no-ff git只会执行快进,这意味着你的分支HEAD将被设置为合并分支的HEAD。要解决此问题,请找到要恢复的提交ID和git reset --hard $COMMITID

答案 3 :(得分:5)

git reset -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

但可能有意想不到的副作用。请参阅git-scm.com/docs/git-revert

中的--mainline parent-number选项

也许一种粗暴但有效的方法是检查该提交的左侧父级,制作所有文件的副本,再次检出HEAD,并用旧文件替换所有内容。然后git将告诉你正在回滚什么,你创建自己的还原提交:)!

答案 4 :(得分:1)

如果合并了分支,则使用拉取请求还原合并,并合并该拉取请求以还原。

我觉得最简单的方法是:

  1. 从develop / master(合并的地方)中取出一个新分支
  2. 使用git revert -m 1 xxxxxx还原“还原”(如果还原是通过分支合并的话),或者使用git revert xxxxxx还原简单的还原
  3. 新分支现在应该具有要再次合并的更改。
  4. 进行更改或合并此分支以开发/掌握
相关问题