回滚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 ,我没有提交' 合并分支'开发'仪表板 '..我怎么会滚动合并回来?

其他问题已经详尽地讨论了恢复合并提交。 当你做一个快进合并,你描述的第二个,你可以使用git reset来恢复到以前的状态:

 git reset --hard <commit_before_merge> 

你可以用git refloggit log或者如果你感觉mox(而没有做其他的事情)find<commit_before_merge>git reset --hard HEAD@{1}

从这里:

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

 git revert -m 1 <merge commit hash> 

Git还原添加了一个新的提交,回滚指定的提交。

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

只需重新设置合并提交git reset --hard HEAD^

如果你使用–no-ff git总是创build一个合并,即使你没有提交任何东西。 如果没有–no-ff git只会做一个快进,这意味着你的分支HEAD将被设置为合并分支的HEAD。 要解决这个问题,find你想要恢复的commit-id,然后git reset --hard $COMMITID

 git reset -m 1 88113a64a21bf8a51409ee2a1321442fd08db705 

但可能会有意想不到的副作用。 请参阅git-scm.com/docs/git-revert中的–mainline parent-number选项

也许一个残酷但有效的方法是检出该提交的左侧父项,复制所有文件,再次检出HEAD,并用旧文件replace所有内容。 然后git会告诉你什么是回滚,你创build自己的恢复提交:)!