【问题标题】:Undo a git merge (hasn't been pushed yet)撤消 git 合并(尚未推送)
【发布时间】:2011-08-22 12:26:01
【问题描述】:

我刚刚在我的一个功能分支(“feedback_tab”)中提交了一些更改,然后签出了“master”并将它们合并到那里。我实际上打算将它们合并到我的“开发”分支中。

现在,master 领先于 'origin/master'(它的远程) 17 次提交 - 我还没有推动合并(显然也不想)。如何将 master 恢复到与意外合并之前相同的状态?我在 git revertgit reset 之间混淆了这些东西。

我查看了我的 git 日志,没有将 feedback_tab 合并到 master 的条目。我还以为它会是最高条目?

有点困惑:/欢迎任何帮助!最大值

【问题讨论】:

  • @myself:天哪,天哪,应该读过常见问题:“程序员常用的软件工具”。

标签: git merge revert


【解决方案1】:

git reset --hard HEAD~17 将您带回 master 头部之前的 17 次提交。 git rebase -i HEAD~17 可能也摆脱了额外的提交。

【讨论】:

  • 您可能想使用reset --merge。如果合并是唯一发生的事情,这会做同样的事情,但是如果您有本地修改(对不受合并影响的文件),它会将它们留在原处,而不是像 --hard 那样销毁它们。
  • 也可以git reset --hard origin/master
  • @Jefromi - 对,下次会记住这一点。谢谢!
  • @Karl - 我认为它只是说“让当前分支成为 origin/master 的副本”?
  • @Max:我会说“使当前分支指向与 origin/master 相同的提交(并将索引和工作树一起拖动)”。但是,是的,这几乎是一个副本。
【解决方案2】:

取自git reset

Undo a merge or pull

    $ git pull                         <1>
    Auto-merging nitfol
    CONFLICT (content): Merge conflict in nitfol
    Automatic merge failed; fix conflicts and then commit the result.
    $ git reset --hard                 <2>
    $ git pull . topic/branch          <3>
    Updating from 41223... to 13134...
    Fast-forward
    $ git reset --hard ORIG_HEAD       <4>

【讨论】:

    【解决方案3】:

    撤消未推送的合并:

    git reset --merge ORIG_HEAD
    

    如果在合并过程中发生冲突,撤消合并的最佳方法是:

    git merge --abort
    

    【讨论】:

    • 谢谢,这很清楚,也很切题。它也有效。 =)
    • 这对我有帮助!谢谢
    • 这个git reset --merge HEAD~1帮助了我。
    【解决方案4】:

    这个肯定能用!

    git reset --hard HEAD~1 
    git init
    

    第一个将还原您最近所做的更改(合并) 第二个会将 repo 初始化为最新的(因此将快进到最新的来源)

    我试过了

    git reset --merge
    

    但它没有成功。

    【讨论】:

      猜你喜欢
      • 2011-01-24
      • 2016-06-02
      • 1970-01-01
      • 2012-11-08
      相关资源
      最近更新 更多