撤消尚未推送的Git合并
在我的主分支中,我做了一个git merge some-other-branch
在本地git merge some-other-branch
,但从未将更改推送到原始主git merge some-other-branch
。 我不是故意要合并,所以我想撤消它。 在合并后做一个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
选项。
正如@Velmont在他的回答中所提出的,在这个直接案例中使用:
git reset --hard ORIG_HEAD
可能会产生更好的结果,因为它应该保留您的更改。 ORIG_HEAD
将在合并发生之前直接指向一个提交,所以你不必亲自去寻找它。
另一个技巧是使用--merge
开关而不是--hard
因为它不会不必要地重置文件:
- 合并
重置索引并更新工作树中<commit>和HEAD之间不同的文件,但保留索引和工作树之间不同的文件(即没有添加更改的文件)。
假设你的本地主人没有超过出身/主人,你应该可以做到
git reset --hard origin/master
然后,您的本地master
分支应该看起来与origin/master
相同。
请参阅Git书中的第4章和Linus Torvalds的原始文章。
要撤消已经推送的合并:
git revert -m 1 commit_hash
像Linus说的,如果你再次犯下分支,一定要恢复回复。
链接地址: http://www.djcxy.com/p/339.html