代码之家  ›  专栏  ›  技术社区  ›  Jason Axelson Gazler

如何还原错误的git合并提交

  •  16
  • Jason Axelson Gazler  · 技术社区  · 14 年前

    所以我的一个同事不小心合并了,实际上只保留了树的一边。所以他开始合并,删除合并引入的所有更改,然后提交合并。

    alt text

    我要做的是还原错误的合并。所以从师父那里我试着跑 git revert -m 1 <sha1sum of faulty merge> 但是git的回答是:

    # On branch master                               
    nothing to commit (working directory clean)
    

    如果你想玩我的测试报告,你可以从 here

    这是一个git bug,还是我遗漏了什么?

    2 回复  |  直到 14 年前
        1
  •  8
  •   brycemcd    14 年前

    最好的经验法则是 永远不要在回购协议公开后改变它的历史。

    我认为这里有几个选择,但最简单的是做一个回扣。使用您的repo,以下是我使用的命令:

    git rebase -i ead3646
    

    有了新的历史 这样地:

    * f0ab6d5 more normal work on dev
    * ebb5103 idx commit
    * ead3646 master change
    * 582c38c dev commits
    * f4b8bc6 initial commit
    

    让你们两个(和其他人)恢复同步需要一些分支、推动、电子邮件和午餐购买。

        2
  •  8
  •   sonnyb Programmer    6 年前

    git/Documentation/howto/revert-a-faulty-merge.txt 尽管这主要是为了还原导致错误更改的合并,而不是还原错误完成的合并。

    处理这个问题的一种方法是再次进行合并,然后将结果合并到master中。在您的示例中,这可能是:

    git checkout -b temp/merge-fixup ead364653b601f48159bca5cb59d6a204a426168
    git merge 2fce9bfe8f721c45ea1ed5f93176322cac60a1d9
    git checkout master
    git merge temp/merge-fixup
    git branch -d temp/merge-fixup