回答

收藏

撤消尚未推送的 Git 合并

技术问答 技术问答 191 人阅读 | 0 人回复 | 2023-09-11

在我的 master 分支,我在git merge some-other-branch我当地做了一个,但是从来没有把变化推到 origin master。我不想合并,所以我想取消。git status合并后做 a 时,我收到了这条消息:% V6 y0 T) G- Q& J! B8 I( L
# On branch master# Your branch is ahead of 'origin/master' by 4 commits.根据我发现的一些说明,我试着操作! v& x9 R8 W9 e* p( N
git revert HEAD -m 1但现在我收到了这条消息git status:' d- [$ j; L' Q" z: l
# On branch master# Your branch is ahead of 'origin/master' by 5 commits.我不希望我的分支领先于任何数量的提交。我怎样才能回到那一点?* ~2 F2 w* a7 @) i( j' [
                                                                1 i$ e# W. R$ W/ M2 Q
    解决方案:                                                               
+ P" D! s7 K$ E& a" R, [$ m. E8 {1 e                                                                在git reflog合并前检查哪个提交?(git reflog将是比 更好的选择git log)。然后您可以使用以下方法重置它:
; t3 e  a5 _- `, k3 Lgit reset --hard commit_sha还有一种方法:. L7 [3 P/ ^1 h+ u9 s
git reset --hard HEAD~1它会让你回到 1 次提交。* m% s  M! Z: x7 _  ^
请注意,任何修改或未提交/未隐藏的文件都将被重置为未修改状态。为了让他们隐藏更改或检查它们--merge以下选项。( A; @# a: d9 Q3 H+ Y
直接使用:
' ~; j2 L0 Z, f4 z; i- Dgit reset --hard ORIG_HEAD可能会产生更好的结果,因为它应该保留你的变化。ORIG_HEAD直接指向合并前提交,不用自己找。# Y: s7 B& W% g
另一个提示是使用--mergeswitch 而不是--hard因为它不会不必要地重置文件:
+ h$ y$ r5 t& W, E% p$ h( Y# ~! ~git reset --merge ORIG_HEAD- 合并# s5 F5 B+ f4 W3 W0 ^! r  M, i
重置索引中重置索引并更新     和 HEAD 之间有不同的文件,但保留索引和工作树之间的不同文件(即未添加的更改)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则