【发布时间】:2016-11-06 12:07:00
【问题描述】:
我在这种情况下不小心将一个分支合并到master。
现在,我希望 master 分支恢复到之前的状态。我使用了git reset --hard HEAD^,但是当我想推送时,我得到了这个错误:
更新被拒绝,因为您当前分支的尖端落后 它的远程对应物
有什么办法可以解决这个问题吗?
【问题讨论】:
标签: git github merge bitbucket
我在这种情况下不小心将一个分支合并到master。
现在,我希望 master 分支恢复到之前的状态。我使用了git reset --hard HEAD^,但是当我想推送时,我得到了这个错误:
更新被拒绝,因为您当前分支的尖端落后 它的远程对应物
有什么办法可以解决这个问题吗?
【问题讨论】:
标签: git github merge bitbucket
据我了解,您目前正在处理 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
【讨论】:
您有多种选择:
删除本地分支并再次检查:
# 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
使用 git reflog
git reflog您也可以随时使用reflog。git reflog 将显示更新HEAD 的任何更改,并且检查所需的引用日志条目会将HEAD 设置回此提交。
每次修改 HEAD 时,reflog 中都会有一个新条目
git reflog
git checkout HEAD@{...}
这会让你回到你想要的提交
这将使您处于一个分离的状态,您将不得不签出新分支并按照步骤 #1 中所述执行上一步。
【讨论】:
git reflog
git log --oneline --graph master 或gitk master 也可以帮助找到master历史中的合并提交。