在我的主分支中,我在本地做了一个git merge some-other-branch
,但从未将更改推送到 origin master。我不是故意合并,所以我想撤消它。合并后执行git status
,我收到此消息:
# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.
git revert HEAD -m 1
但现在我收到git status
消息:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
我不希望我的分支机构通过任意数量的提交来领先。我该如何回到这一点?
使用git reflog
检查哪个提交是合并之前的一个(git reflog 将是比 git log 更好的选项)。然后你可以使用以下方法重置它
git reset --hard commit_sha
还有另一种方式
git reset --hard HEAD~1
会让你回来 1 提交。
请注意,任何已修改和未提交 / 未缓存的文件都将重置为未修改状态 。要保持它们--merge
更改或查看下面的--merge
选项。
正如 @Velmont 在他的回答中所建议的那样,在这个直接案例中使用:
git reset --hard ORIG_HEAD
可能会产生更好的结果,因为它应该保留您的更改。 ORIG_HEAD
将在合并发生之前直接指向提交,因此您不必自己寻找它。
另一个提示是使用--merge
开关而不是--hard
因为它不会不必要地重置文件:
- 合并
重置索引并更新工作树中
和 HEAD 之间不同的文件,但保留索引和工作树之间不同的文件(即哪些文件尚未添加更改)。
假设您的本地主人不在原点 / 主人之前,您应该能够做到
git reset --hard origin/master
然后您的本地master
分支看起来应该与origin/master
相同。
请参阅Git 书中的第 4 章和 Linus Torvalds 的原始帖子 。
要撤消已推送的合并:
git revert -m 1 commit_hash
如果你再次提交分支,请确保恢复恢复,如 Linus 所说。