【问题标题】:How to cancel a merge made into master branch如何取消合并到主分支
【发布时间】:2016-11-06 12:07:00
【问题描述】:

我在这种情况下不小心将一个分支合并到master

现在,我希望 master 分支恢复到之前的状态。我使用了git reset --hard HEAD^,但是当我想推送时,我得到了这个错误:

更新被拒绝,因为您当前分支的尖端落后 它的远程对应物

有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: git github merge bitbucket


    【解决方案1】:

    据我了解,您目前正在处理 master 分支,只是想将其重置为与其远程分支完全相同(即放弃您的更改)。最简单的方法是:

    $ git fetch
    $ git reset --hard origin/master
    

    如果你已经推送了你所做的合并,你将不得不做然后必须做一个强制推送。 但是要小心,因为这会清除其他人在此期间可能进行的任何更改。

    $ git reset --hard <hash of commit that is the earlier version of master to which you want to revert, as shown in the merge commit that you made>
    $ git push -f
    

    【讨论】:

    • 不,我正在另一个分支上工作,我只是错误地将它合并到 master 分支。我想取消那个。
    • 你能提供更多关于你的情况的信息吗?我不确定我是否清楚。
    【解决方案2】:

    您有多种选择:

    1. 删除本地分支并再次检查:

      # checkout temp branch
      git checkout - b tempBranch
      
      # delete the current branch
      git branch -D master
      
      # checkout the old branch
      git fetch --all --prune
      git checkout master
      
    2. 使用 git reflog

    git reflog

    您也可以随时使用reflog
    git reflog 将显示更新HEAD 的任何更改,并且检查所需的引用日志条目会将HEAD 设置回此提交。

    每次修改 HEAD 时,reflog 中都会有一个新条目

    git reflog
    git checkout HEAD@{...}
    

    这会让你回到你想要的提交

    这将使您处于一个分离的状态,您将不得不签出新分支并按照步骤 #1 中所述执行上一步。


    【讨论】:

    • 我在合并之前找不到提交,我正在寻找使用git reflog
    • @Zakaria git log --oneline --graph mastergitk master 也可以帮助找到master历史中的合并提交。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2017-02-26
    • 2015-06-23
    • 2015-09-15
    相关资源
    最近更新 更多