如何恢复Git指定提交状态并作为新提交推送且保留原有历史记录
解决方案
两种方案都可以满足你「保留全部原有提交历史、仅新增回滚提交」的需求,不需要手动修改代码:
方法1:批量回滚最近三次提交
git revert本身支持批量处理一段范围的提交,不需要逐个指定:
- 如果需要保留每一次提交对应的单独回滚记录,直接执行:
git revert HEAD~3..HEAD
如果没有冲突,Git会自动生成3条对应回滚提交,默认提交信息为Revert "原提交的说明",你也可以按需求修改。
- 如果只需要生成一条合并的回滚提交,添加
--no-commit(简写-n)参数即可:
git revert -n HEAD~3..HEAD # 改动会自动进入暂存区,自行提交即可 git commit -m "恢复到三次提交前的Stuff状态"
注意:如果回滚过程中出现冲突,解决冲突后执行
git add <冲突文件>,再执行git revert --continue即可继续流程。
方法2:直接对齐到目标提交状态(一步到位)
如果你不需要逐次回滚中间提交,想要直接把当前项目完全恢复到-3对应提交的状态,可以用git read-tree命令,它会直接把暂存区和工作目录重置为目标提交的状态,但不会移动当前分支的HEAD指针:
- 先通过
git log --oneline查询到你要恢复的-3提交对应的SHA值(假设为abc123) - 执行命令:
git read-tree --reset -u abc123
- 执行完成后所有文件已经和目标提交完全一致,直接提交即可:
git commit -m "恢复到提交abc123(Stuff状态)"
推送远程
两种方案都是新增提交,不会修改任何已有提交历史,操作完成后直接正常推送到远程即可,不需要使用强推参数:
git push origin master
内容的提问来源于stack exchange,提问作者Martin Müsli
相关产品推荐
相关产品推荐

