Git软重置临时提交修改后如何恢复原有提交并生成新提交?
操作方案
你执行git reset --soft HEAD~n后,Git会自动将重置前的分支HEAD记录在ORIG_HEAD变量中,只要你后续没有执行其他重置、合并类操作,可直接用该变量定位到原来的最新提交,按以下步骤操作即可完整保留已推送的a、b提交,同时生成新的提交n:
- 第一步:将当前所有改动(包含软重置后保留的原有提交改动、以及你新增的修改)暂存后创建临时提交
git add . git commit -m "临时存储改动"
- 第二步:将当前临时提交变基到重置前的原分支HEAD上,原有a、b提交会被完整保留,你的临时改动会自动接在b提交之后
git rebase ORIG_HEAD
如果ORIG_HEAD已经失效,可执行git reflog查看操作历史,找到执行reset前的提交哈希值,替换上面的ORIG_HEAD即可。变基过程中如果出现冲突,正常解决冲突后执行git rebase --continue即可。
- 第三步:软重置掉临时提交,此时暂存区仅会保留你新增的修改内容,原有a、b提交已经完全恢复到提交链中
git reset --soft HEAD~1
- 第四步:正常提交新改动即可,最终提交链和远端已推送的a、b提交完全兼容,直接执行
git push就能推送,无需强制覆盖,不会影响其他协作者
git commit -m "你的新提交说明"
优化建议
如果只是需要查看当前分支相对于基准提交的全量改动,不需要执行软重置操作:可以直接用IDE自带的提交对比功能,选择基准提交和当前最新提交做差异对比即可,也可以直接执行git diff <基准提交哈希> HEAD查看全量改动,避免多次调整提交链。
内容的提问来源于stack exchange,提问作者Wizr
相关产品推荐
相关产品推荐

