切换分支后Git分支编辑内容丢失,如何恢复未提交更改?
恢复Git中丢失的未提交更改
别慌,你这种情况里的未提交改动其实大概率能找回来——Git并没有直接删除这些内容,只是把它们标记成了未被引用的临时对象存放在本地仓库里。下面给你两种实用的恢复方法:
方法一:用git fsck查找丢失的对象
这是最常用的恢复未提交改动的方式,步骤如下:
- 在仓库根目录运行命令:
这个命令会扫描Git的对象数据库,把所有未被分支、标签或其他引用关联的对象,放到仓库的git fsck --lost-found.git/lost-found/other目录下。 - 查看这些临时对象的内容,找到对应foo.txt的版本:
你可以逐个查看对象内容,用以下命令:
或者直接查看文件:git show <对象ID>
(对象ID是cat .git/lost-found/other/<对象ID>.git/lost-found/other目录下的文件名,比如a1b2c3d...) - 找到正确的版本后,把内容写回foo.txt:
或者直接复制对象里的内容,粘贴到foo.txt中保存即可。git show <对象ID> > foo.txt
方法二:检查Git的临时 stash(如果自动触发过)
虽然你没手动执行git stash,但有时候Git在强制切换分支时,会自动帮你 stash 未提交的改动。你可以运行以下命令查看:
git stash list
如果能看到对应的 stash 记录,用以下命令恢复:
git stash apply stash@{n}
(把n换成列表里对应的序号,比如stash@{0})
后续注意事项
为了避免以后再遇到这种问题,建议你在切换分支前,先把未提交的改动临时保存:
- 执行
git stash:把当前工作区的改动暂存起来 - 切换分支完成后,再执行
git stash apply恢复之前的改动
内容的提问来源于stack exchange,提问作者jjk




