You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git本地未推送提交丢失后如何恢复?

可以恢复!不用重写代码

别慌,你这个情况完全能找回那个未推送的本地提交,Git的reflog就是专门用来解决这种「丢失提交」问题的。

为什么你在git log里看不到它?

你切换到历史提交后,当前分支的HEAD指向了旧的提交节点,而那个标注为half baked code的提交不在当前分支的历史链上了,所以普通的git log查不到它。但Git会默默记录所有HEAD的变动操作——不管是提交、切换分支还是重置,这些记录都存在reflog里。

具体恢复步骤:

  1. 查看所有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)。

  2. 回到那个提交查看内容
    用刚才的哈希值直接切换过去:

    git checkout def5678
    

    现在你就能看到那个提交的代码了,确认是不是你要恢复的内容。

  3. 把提交合并回你的工作分支
    如果想把这个提交的内容移回原来的分支(比如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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:32:59