回滚 Git 合并

问题描述 投票:0回答:6
develop branch
--> dashboard (working branch)

我使用

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

git 日志:

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

git
6个回答
486
投票

恢复合并提交已在 其他问题中详尽介绍。当您进行快进合并(您描述的第二个)时,您可以使用

git reset
返回到之前的状态:

git reset --hard <commit_before_merge>

您可以通过

<commit_before_merge>
git reflog
找到
git log
,或者,如果您感到莫西(并且没有做任何其他事情):
git reset --hard HEAD@{1}


225
投票

从这里开始:

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

git revert -m 1 <merge commit hash>

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

使用

-m 1
告诉 git 这是一次合并,我们想要回滚到 master 分支上的父提交。您可以使用
-m 2
来指定开发分支。


50
投票

只需使用

git reset --hard HEAD^
重置合并提交即可。

如果您使用 --no-ff git 总是会创建合并,即使您在中间没有提交任何内容。如果没有 --no-ff git 只会快进,这意味着您的分支 HEAD 将设置为合并分支的 HEAD。要解决此问题,请找到您要恢复的提交 ID,然后

git reset --hard $COMMITID


29
投票
git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705

但可能会有意想不到的副作用。请参阅

git-scm.com/docs/git-revert
中的 --mainline parent-number

选项

也许一种粗暴但有效的方法是签出该提交的左父项,复制所有文件,再次签出

HEAD
,然后用旧文件替换所有内容。然后 git 会告诉您正在回滚的内容,然后您创建自己的恢复提交:)!


5
投票

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

我觉得最简单的方法是:

  1. 从develop/master(你合并的地方)取出一个新分支
  2. 使用
    git revert -m 1 xxxxxx
    恢复“恢复”(如果恢复是使用分支合并的),或者使用
    git revert xxxxxx
    如果它是简单的恢复
  3. 新分支现在应该包含您想要再次合并的更改。
  4. 进行更改或合并此分支到开发/掌握

0
投票

如果这只是最后一次提交,你可以简单地这样做

git reset --hard HEAD

© www.soinside.com 2019 - 2024. All rights reserved.