如何使用Git撤销历史提交并保留后续所有更改?
解决Git历史提交调整问题
一、撤销两次历史提交并保留后续更改
操作前务必先创建分支备份,防止误操作:
git checkout master git checkout -b master_backup
- 执行交互式变基,先通过
git log --oneline查看提交历史,找到要撤销的两次提交的前一个提交的哈希值(比如要撤销的两次提交是abc123和def456,它们的前置提交是ghi789):
git rebase -i ghi789
- 在弹出的编辑器里,找到那两次提交的行,把行首的
pick改成drop(或直接删除这两行),保存并退出编辑器。 - Git会自动将后续所有提交重新应用到移除目标提交后的分支上,若出现冲突,手动解决冲突后执行:
git add . git rebase --continue
- 由于修改了远程分支的历史,需要强制推送到Azure DevOps:
git push -f origin master
注意:强制推送后,团队其他成员需要重新拉取分支,避免本地历史与远程冲突。
二、移除移动项目文件夹的那次提交并保留后续更改
同样先创建备份分支,再按以下步骤操作:
- 用
git log --oneline找到移动文件夹提交的前一个提交的哈希值,执行交互式变基:
git rebase -i <前一个提交哈希>
- 在编辑器中找到移动文件夹的提交行,把
pick改成drop,保存退出。 - 此时大概率会出现冲突(后续提交可能基于移动后的文件路径修改),解决冲突时:
- 打开冲突文件,将后续提交的修改内容对应到原路径的文件中
- 删除移动文件夹相关的变更内容
- 解决完所有冲突后,执行:
git add . git rebase --continue
- 完成变基后,强制推送到远程:
git push -f origin master
注意:如果团队成员已拉取过包含移动提交的分支,需要让他们执行
git pull --rebase同步远程新历史。
内容的提问来源于stack exchange,提问作者Concy
相关产品推荐
相关产品推荐

