如何撤销Squash Commits并仅保留指定提交的代码变更
问题描述
错误执行了Squash Commits操作,希望撤销所有合并提交,仅保留提交699546a(对应日志:699546a HEAD@{5}: rebase (pick): Azure JDBC Changes)的变更,当前git reflog信息如下:
868efc8 (HEAD -> jdbc_exporter, origin/jdbc_exporter) HEAD@{0}: revert: Revert "Azure JDBC Changes" 699546a HEAD@{1}: reset: moving to HEAD 699546a HEAD@{2}: reset: moving to HEAD@{1} 699546a HEAD@{3}: reset: moving to 699546a 699546a HEAD@{4}: rebase (finish): returning to refs/heads/jdbc_exporter 699546a HEAD@{5}: rebase (pick): Azure JDBC Changes 4a63871 HEAD@{6}: rebase (squash): parent 033f1e42b85af682f55a79f4f5bef401af0a1125 eab2f79 HEAD@{7}: rebase (squash): # This is a combination of 21 commits. 002f259 HEAD@{8}: rebase (squash): # This is a combination of 20 commits. a3482a5 HEAD@{9}: rebase (squash): # This is a combination of 19 commits. 4d46620 HEAD@{10}: rebase (squash): # This is a combination of 18 commits. 855e0b9 HEAD@{11}: rebase (squash): # This is a combination of 17 commits. 6b81fa9 HEAD@{12}: rebase (squash): # This is a combination of 16 commits. f40ca89 HEAD@{13}: rebase (squash): # This is a combination of 15 commits. 0008502 HEAD@{14}: rebase (squash): # This is a combination of 14 commits. c3acb29 HEAD@{15}: rebase (squash): # This is a combination of 13 commits. 3be9992 HEAD@{16}: rebase (squash): # This is a combination of 12 commits. 73c2394 HEAD@{17}: rebase (squash): # This is a combination of 11 commits. fcc7b05 HEAD@{18}: rebase (squash): # This is a combination of 10 commits. 770d5d4 HEAD@{19}: rebase (squash): # This is a combination of 9 commits. 19bf9eb HEAD@{20}: rebase (squash): # This is a combination of 8 commits. fbba96b HEAD@{21}: rebase (squash): # This is a combination of 7 commits. ad58a66 HEAD@{22}: rebase (squash): # This is a combination of 6 commits. e9e5ad1 HEAD@{23}: rebase (squash): # This is a combination of 5 commits. 74cb8e4 HEAD@{24}: rebase (squash): # This is a combination of 4 commits. 0ccc2cc HEAD@{25}: rebase (squash): # This is a combination of 3 commits. fcc3a94 HEAD@{26}: rebase (squash): # This is a combination of 2 commits. cf222f7 HEAD@{27}: rebase (continue): parent 033f1e42b85af682f55a79f4f5bef401af0a1125 02b73ef HEAD@{28}: rebase (squash): # This is a combination of 7 commits. d021157 HEAD@{29}: rebase (squash): # This is a combination of 6 commits. 46787cf HEAD@{30}: rebase (squash): # This is a combination of 5 commits. 54d1843 HEAD@{31}: rebase (squash): # This is a combination of 4 commits. 95a4b10 HEAD@{32}: rebase (squash): # This is a combination of 3 commits. 66c7cb2 HEAD@{33}: rebase (squash): # This is a combination of 2 commits. 95a4b10 HEAD@{32}: rebase (squash): # This is a combination of 3 commits. 66c7cb2 HEAD@{33}: rebase (squash): # This is a combination of 2 commits. 8abe618 HEAD@{34}: rebase (pick): DB CC
解决方案
核心操作步骤
- 执行硬重置,将本地分支完全恢复到目标提交
699546a的状态,直接丢弃之后所有的squash、reset和revert操作:git reset --hard 699546a - 若已将错误提交推送到远程分支(如
origin/jdbc_exporter),需强制推送覆盖远程(仅在你是分支唯一维护者或已和团队沟通确认后执行):git push origin jdbc_exporter --force
关键说明
- 硬重置后,本地代码会完全匹配
699546a提交的状态,所有后续错误操作产生的变更都会被清除,精准保留你需要的"Azure JDBC Changes"内容。 - 若你有未提交的本地修改不想丢弃,可以改用
git reset --soft 699546a,但此操作会将后续变更保留为未提交状态,需自行清理不需要的内容。
内容的提问来源于stack exchange,提问作者Marcin_S
相关产品推荐
相关产品推荐

