Git本地未推送提交丢失后如何恢复?
可以恢复!不用重写代码
别慌,你这个情况完全能找回那个未推送的本地提交,Git的reflog就是专门用来解决这种「丢失提交」问题的。
为什么你在git log里看不到它?
你切换到历史提交后,当前分支的HEAD指向了旧的提交节点,而那个标注为half baked code的提交不在当前分支的历史链上了,所以普通的git log查不到它。但Git会默默记录所有HEAD的变动操作——不管是提交、切换分支还是重置,这些记录都存在reflog里。
具体恢复步骤:
查看所有HEAD操作记录
运行这个命令:git reflog你会看到一串类似这样的输出:
abc1234 HEAD@{0}: checkout: moving from main to xdfsfsfs def5678 HEAD@{1}: commit: half baked code ghi9012 HEAD@{2}: commit: [之前的提交信息]找到那条带有
commit: half baked code的条目,记下它前面的哈希值(比如上面的def5678)。回到那个提交查看内容
用刚才的哈希值直接切换过去:git checkout def5678现在你就能看到那个提交的代码了,确认是不是你要恢复的内容。
把提交合并回你的工作分支
如果想把这个提交的内容移回原来的分支(比如main):- 先切回原分支:
git checkout main - 然后用cherry-pick把提交内容应用过来:
git cherry-pick def5678
这样那个提交的修改就会被添加到当前分支的最新位置。
如果你想直接把原分支的HEAD移到那个提交上(覆盖当前分支的后续变动,谨慎使用),可以用:
git reset --hard def5678注意:
reset --hard会丢弃当前分支上未提交的修改,执行前确保没有未保存的更改。- 先切回原分支:
后续小建议
以后如果不确定代码是否没问题,可以:
- 用
git stash暂存修改,而不是直接提交; - 创建一个临时分支(比如
git checkout -b temp-wip)来提交半成品代码,这样就算切回主分支,也能在临时分支找到你的提交,更安全。
内容的提问来源于stack exchange,提问作者TAH
相关产品推荐
相关产品推荐

