312
develop branch
--> dashboard (working branch)

git merge --no-ff develop用来将任何上游更改合并到仪表板中

混帐日志:

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,我不会得到提交'合并分支'开发'到仪表板'..我将如何回滚该合并?

4

5 回答 5

443

其他问题已经详尽地介绍了恢复合并提交。当您进行快进合并时,您描述的第二个合并,您可以使用git reset它返回到之前的状态:

git reset --hard <commit_before_merge>

你可以找到<commit_before_merge>with git reflog, git log, 或者,如果你感觉很奇怪(并且没有做任何其他事情):git reset --hard HEAD@{1}

于 2012-07-30T13:32:27.917 回答
193

从这里:

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

git revert -m 1 <merge commit hash>

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

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

于 2015-07-29T10:24:29.540 回答
46

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

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

于 2012-07-30T13:30:47.463 回答
25
git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

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

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

于 2015-03-17T21:36:11.117 回答
4

如果您合并了分支,则使用拉取请求恢复合并并合并该拉取请求以恢复。

我觉得最简单的方法是:

  1. 从develop/master(您合并的地方)取出一个新分支
  2. 使用git revert -m 1 xxxxxx(如果使用分支合并还原)或使用git revert xxxxxx简单还原来还原“还原”
  3. 新分支现在应该有您想要再次合并的更改。
  4. 进行更改或将此分支合并到开发/主
于 2020-06-08T11:00:16.097 回答