一尘不染

撤消尚未推送的 Git 合并

javascript

在我的 master 分支中,我在git merge some-other-branch本地做了一个,但从未将更改推送到 origin master。我不是想合并,所以我想撤消它。git status在我合并后做 a 时,我收到了这条消息:

# 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.

我不希望我的分支领先于任何数量的提交。我如何回到那个点?


阅读 177

收藏
2022-01-08

共1个答案

一尘不染

git reflog合并之前检查哪个提交是一个提交(git reflog将是比 更好的选择git log)。然后您可以使用以下方法重置它:

git reset --hard commit_sha

还有一种方法:

git reset --hard HEAD~1

它会让你回到 1 次提交。

请注意,任何已修改和未提交/未隐藏的文件都将重置为其未修改状态。为了让他们隐藏更改或查看--merge下面的选项。


在这种直接情况下使用:

git reset --hard ORIG_HEAD

可能会产生更好的结果,因为它应该保留您的更改。ORIG_HEAD将在合并发生之前直接指向提交,因此您不必自己寻找它。


另一个提示是使用--mergeswitch 而不是--hard因为它不会不必要地重置文件:

git reset --merge ORIG_HEAD

- 合并

重置索引并更新工作树中 和 HEAD 之间不同的文件,但保留索引和工作树之间不同的文件(即具有尚未添加的更改)。

2022-01-08