撤消尚未推送的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

上一篇: Undo a Git merge that hasn't been pushed yet

下一篇: Set cellpadding and cellspacing in CSS?