如何在Git中撤销两个月前已推送的中间提交并保留其他提交?
撤销已推送的历史中间特定提交
当需要撤销已推送到远程仓库、且处于提交历史中间的特定提交(比如你示例中的commit 105和commit 106),同时保留其他提交不变时,推荐使用git revert命令——它不会修改现有提交历史,而是生成新的"撤销提交"来抵消目标提交的改动,适合公共分支场景。
具体操作步骤:
拉取最新远程代码
确保本地分支与远程同步:git pull origin <你的分支名>定位目标提交的哈希值
查看提交历史,找到commit 105和commit 106的哈希(可使用简短哈希或完整哈希):git log --oneline输出示例:
abc123 commit 1 ---- 2 mins ago def456 commit 2 ---- 1 day ago ... ghi789 commit 105 --- 2 months ago jkl012 commit 106 --- 2 months ago mno345 commit 107 --- 3 months ago ...这里
ghi789是commit105的哈希,jkl012是commit106的哈希。逐个撤销目标提交
注意:要从新的提交往旧的提交顺序撤销(先处理commit106,再处理commit105),降低冲突概率:- 撤销commit106:
执行后会自动打开编辑器,填写该撤销提交的说明,保存退出即可。git revert jkl012 - 撤销commit105:
同样填写提交说明后保存退出。git revert ghi789
- 撤销commit106:
处理冲突(如果有)
若目标提交和后续提交有代码重叠,会触发冲突。解决冲突后,执行以下命令继续revert流程:git add <冲突文件名> git revert --continue若想放弃本次revert,可执行
git revert --abort。推送撤销结果到远程
将新生成的两个撤销提交推送到远程仓库:git push origin <你的分支名>
为什么不推荐git reset?
git reset会直接删除目标提交之后的所有历史记录,修改已推送的公共分支历史会导致其他协作者的本地仓库与远程不一致,引发同步问题,因此仅适用于本地未推送的提交。
内容的提问来源于stack exchange,提问作者JShobbyist
相关产品推荐
相关产品推荐

