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

未提交代码切换至其他分支,切回原分支后代码丢失如何找回?

关于Git分支切换后代码找回的两个问题解答

嘿,这俩问题绝对是Git新手常踩的坑,我来给你讲明白怎么回事以及怎么解决:

问题1:切换至其他分支但未提交当前代码,能否找回切换前的代码?

大部分情况下是可以找回的,具体分两种场景来看:

  • 如果切换分支时Git没提示冲突(也就是你修改的文件在目标分支里没有被改动过),那你的修改其实会保留在工作区里——哪怕你切去了其他分支,只要没做额外操作,切回原分支后修改还在原地。
  • 如果切换分支时Git弹出冲突提示,不让你直接切换,这时候你要么得先提交修改,要么用git stash暂存。要是你没做这两步就强制切换(比如用了git checkout -f或者git switch -f),工作区的修改会被覆盖,但别慌,Git其实悄悄留了备份,看问题2的解决方案就行。

问题2:从branch1切到branch2忘提交,切回branch1发现代码丢失,怎么找回?

这种情况一般是因为你切换时,branch2和你修改的文件有冲突,你强制切换导致工作区被覆盖了。按下面的方法依次尝试,大概率能找回来:

  • 先检查暂存区和stash记录

    1. 先跑git status看看有没有意外暂存的文件,如果有,用git restore --staged <文件名>把文件从暂存区恢复到工作区就行。
    2. 试试git stash list,要是之前不小心触发了stash(比如Git提示冲突时你选了默认选项),直接用git stash apply就能把暂存的修改恢复回来。
  • 用Git引用日志(reflog)找回
    Git会记录你在仓库里的所有操作,哪怕是没提交的修改也可能被存在“孤儿提交”里:

    1. 执行git reflog,你会看到一串操作记录,每条前面有个哈希值。
    2. 用git show <哈希值>逐个查看记录对应的内容,找到包含你丢失代码的那条。
    3. 找到后,要么用git cherry-pick <哈希值>把这个提交的内容应用到当前分支,要么用git restore <文件名> <哈希值>:<文件名>单独恢复某个文件。
  • 用git fsck查找未被引用的对象
    如果reflog里没找到,试试git fsck --lost-found,这个命令会找出仓库里所有没被任何分支或标签引用的Git对象:

    1. 跑完命令后,Git会把这些对象存在.git/lost-found/other目录里,每个文件对应一个哈希值。
    2. 用git show <哈希值>逐个查看这些文件,找到包含你丢失代码的那个,再按上面的方法恢复即可。

最后给你提个醒:以后切换分支前,要么提交当前修改,要么用git stash暂存,这是最稳妥的做法,能避免绝大多数这类麻烦。

内容的提问来源于stack exchange,提问作者tiennl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:42:27