误两次回滚提交后,如何恢复原代码变更?
不用重新编写代码,凭借你记录的原commit ID,有多种方法可以恢复变更:
确认目标commit的有效性
先在终端执行git show <你的commit ID>,如果能显示出该commit的具体变更内容,说明这个commit还保存在Git的本地对象数据库中,完全可以恢复。方法1:Cherry-pick 到当前分支
如果你只是想把原commit的变更应用到当前分支,执行:git cherry-pick <你的commit ID>
这个命令会将指定commit的修改单独提取出来,合并到当前分支上,适合不需要覆盖当前分支其他内容的场景。方法2:Reset 到原commit状态
如果你希望当前分支直接回到原commit的完整状态(覆盖当前分支所有后续的回滚操作),执行:git reset --hard <你的commit ID>
注意:这个命令会清除当前工作区和暂存区的所有未提交修改,执行前确保没有需要保留的本地变更。方法3:回滚之前的两次回滚操作
如果你之前的两次回滚是通过git revert完成的(VS Code的图形界面回滚通常会生成revert commit),可以通过revert这两个回滚commit来恢复:- 先执行
git log找到那两个回滚操作对应的commit ID - 执行
git revert <第一个回滚commit ID> <第二个回滚commit ID>
这样会生成两个新的commit,把之前的回滚操作抵消,原变更就会恢复。
- 先执行
额外保障:用reflog找回丢失的commit
如果意外找不到原commit ID了,还可以通过git reflog查看本地Git的所有操作记录,哪怕commit被标记为删除,只要没被Git垃圾回收(默认至少保留30天),都能在reflog里找到对应的记录,然后通过git reset --hard <reflog里的commit哈希>恢复。
内容的提问来源于stack exchange,提问作者Muhammed Irfan

