未stash切换分支后执行git checkout .,如何恢复本地未提交修改?
恢复未提交且被
git checkout .覆盖的本地修改 用Git对象数据库找回零散修改
执行git fsck --lost-found命令,Git会扫描所有未被分支、标签引用的对象,把它们放到.git/lost-found/目录下。其中other文件夹里存的是单个文件的内容快照(blob对象),commit文件夹里是丢失的提交记录。
你可以逐个用git show <blob-id>查看内容,找到对应修改后,直接把内容复制回目标文件即可。查看Git引用日志(Reflog)
运行git reflog,这里会记录你所有的Git操作历史,包括分支切换、提交、重置等。虽然你没提交修改,但偶尔切换分支时,Git会自动生成临时提交来保存未完成的修改(这种情况不多,但可以试试)。
如果看到疑似的记录,用git show <commit-id>查看内容,确认是丢失的修改后,可以用git cherry-pick <commit-id>或者直接复制内容到工作区。检查系统或编辑器的备份/临时文件
如果你的系统开了自动备份(比如Mac的Time Machine、Windows的文件历史),直接去备份里找对应文件的历史版本就行。另外,很多编辑器会自动保存临时文件,比如VS Code的缓存目录、Sublime Text的自动备份文件夹,也可以去这些地方碰碰运气。
注意:这些方法不能保证100%恢复,毕竟git checkout .是直接覆盖工作区文件,能否找回取决于Git是否还保留着修改的快照,以及有没有其他备份渠道。
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

