回滚Git合并

回滚Git合并,git,Git,我使用git merge--no ff develope将任何上游更改合并到仪表板中 git日志: develop branch --> dashboard (working branch) 提交88113a64a21bf8a51409ee2a1321442fd08db705 合并:981bc20 888a557 作者:XXXX 日期:周一至七月30日08:16:46 2012-0500 将分支“开发”合并到仪表板 提交888a5572428a372f15a52106b8d74ff910

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

git日志:

develop branch
--> dashboard (working branch)
提交88113a64a21bf8a51409ee2a1321442fd08db705
合并:981bc20 888a557
作者:XXXX
日期:周一至七月30日08:16:46 2012-0500
将分支“开发”合并到仪表板
提交888a5572428a372f15a52106b8d74ff910493f01
作者:根
日期:太阳2012年7月29日10:49:21-0500
固定结束日期编辑显示为前导0
提交167AD941726C876349BFA44587BDCD475EB8CD8
作者:XXXX
日期:Sun Jul 29 09:13:24 2012-0500
合并中有大约50多个提交,我想知道如何恢复合并,使仪表板返回到预合并状态


第二部分是,如果我不使用
--no ff
进行合并,我就不会将commit'合并分支“develope”放到仪表板中。。我如何回滚合并

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


如果使用--no ff git,则始终会创建一个合并,即使中间没有提交任何内容。没有--no ff git只会执行快进操作,这意味着您的分支头将被设置为合并分支的头。要解决此问题,请查找要还原到的提交id和git reset--hard$COMMITID

在执行快进合并(您描述的第二个合并)时,已详细介绍了还原合并提交,您可以使用
git reset
返回到以前的状态:

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
git重置——硬
您可以使用
git reflog
git log
找到
,或者,如果您感觉到莫西(并且没有做任何其他事情):
git reset--hard HEAD@{1}

git reset --hard <commit_before_merge>
但可能会产生意想不到的副作用。请参阅中的
--主线母线编号
选项

也许一个简单但有效的方法是签出该提交的左父级,复制所有文件,再次签出
HEAD
,并用旧文件替换所有内容。然后git将告诉您要回滚什么,您将创建自己的revert commit:)

从这里开始:

git还原-m 1
Git revert添加一个新的提交,该提交回滚指定的提交


使用
-m1
告诉git这是一个合并,我们希望回滚到主分支上的父提交。您可以使用
-m2
来指定开发分支。

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

我觉得最简单的方法是:

  • 从develop/master(合并的地方)中取出一个新分支
  • 使用
    git Revert-m 1 xxxxxx
    (如果使用分支合并还原)或使用
    git Revert xxxxxx
    (如果是简单还原)还原“还原”
  • 新分支现在应该具有要再次合并的更改
  • 更改或合并此分支以开发/掌握


  • 谢谢你的快速回复。。查看git日志,合并前的提交是50多次提交,因为git merge develop实际上会将所有其他提交都放进去。我想我不明白的是,如果我不知道合并是什么/在哪里-我怎么找到它?您提到在合并之前查找提交。。我想我不明白Part看起来像git reflog,它很好地总结了最后的头,让我知道需要重置到哪里。git日志的粒度似乎太大,无法确定要重置的位置。谢谢你,
    reflog
    是救命恩人
    HEAD@{1}
    只是描述了HEAD的第二个最新状态,或者更严格地说:“一个ref后跟后缀@,带有一个括号对中包含的顺序规范(例如,{1},{15}),指定了该ref的第n个先验值。”将revert推到remote怎么样?我看不出它会起什么作用。这是没有希望的。它会在合并后销毁所有提交。可能是+1的副本,因为此答案不会像重置一样干扰历史记录(如果您已经推到远程,这一点非常重要)。但是我应该期待什么意外的副作用呢?这就是你提到的副作用吗<代码>还原合并提交声明您永远不会希望合并带来的树更改。因此,以后的合并只会带来由提交引入的树更改,这些更改不是以前还原的合并的祖先。这可能是你想要的,也可能不是你想要的。
    你说
    git reset
    是解决方案,但也提到它可能会产生意想不到的副作用。但是,该链接来自
    git revert
    ,而不是
    git reset
    :)请注意,git reset没有-m标志。另请注意@jorgorpinel引用的是git revert文档,而不是git reset。我认为他的意思是说
    git revert
    不是
    git reset
    如何避免主线被指定,但commit 1234xyz不是合并错误。请注意,在此之后不能重新合并分支,正如文档所说:“还原合并提交声明您永远不会希望合并带来的树更改。因此,以后的合并只会带来由提交引入的树更改,这些更改不是以前还原的合并的祖先。这可能是你想要的,也可能不是你想要的。”@DaliborKarlović这句话有点苛刻。你以后一定可以恢复这些更改,诀窍是恢复提交。更多信息请参阅“恢复提交”一节“遗憾的是,@Hilikus评论中的
    here
    链接不再有效。该网站声称内容被转移到了一本书()中,但如果是这样,找到其中的内容非常重要。@DaliborKarlović以上是@Christopher给出的答案吗?如果您在合并之前不知道提交,则撤消合并的内容将被移动到良好的解决方案中。对我来说,这很有效,因为我不知道提交id。+1如果不需要的合并已提交到远程,我使用gitpush-f在恢复后更新远程分支。
    git revert -m 1 88113a64a21bf8a51409ee2a1321442fd08db705
    
    git revert -m 1 <merge commit hash>