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

合并/更新master分支时丢失本地目录/文件夹,如何找回?

找回Git合并/同步时丢失的文件和目录

别慌!Git的设计就是尽可能保留历史操作记录,你的文件大概率还能找回来。我给你整理几个实用的操作步骤,按顺序试就行:

1. 先通过git reflog定位丢失前的状态

Git的reflog会记录所有HEAD指针的变动(包括合并、拉取、重置这些操作),这是找回文件的关键。在终端里运行:

git reflog

你会看到类似这样的输出:

a1b2c3d HEAD@{0}: merge master: Fast-forward
d4e5f6g HEAD@{1}: checkout: moving from master to your-branch
h7i8j9k HEAD@{2}: commit: add new feature

找到你执行合并/同步操作之前的那条记录(比如上面的HEAD@{1}或者HEAD@{2}),记下对应的哈希值(比如d4e5f6g)。

2. 验证该记录是否包含丢失的文件

先确认这个历史版本里确实有你丢失的目录,避免白忙活。运行:

git ls-tree -r <commit-hash> --name-only | grep "lost-directory-name"

如果输出里能看到你丢失的目录路径,说明找对了版本。

3. 找回丢失的文件/目录

有两种方式,选适合你的:

  • 方式一:直接提取丢失的目录到当前分支
    这种方式不会改变当前分支的其他内容,只把丢失的目录恢复回来,最安全:

    git checkout <commit-hash> -- path/to/lost-directory
    

    执行完后,你会发现丢失的目录已经回到工作区了,记得提交这个恢复操作:

    git add path/to/lost-directory
    git commit -m "recover lost directory from historical commit"
    
  • 方式二:暂时回到丢失前的状态查看(可选)
    如果你想先确认整个状态再恢复,可以切换到那个历史版本(注意这是分离HEAD状态,不要在这个状态下提交新内容):

    git checkout <commit-hash>
    

    确认文件都在之后,切回你的原分支,再用方式一提取文件即可:

    git checkout your-branch-name
    

4. 极端情况:reflog里找不到记录怎么办?

如果reflog里没找到对应的操作(比如过了很久,reflog被清理了),可以试试用git fsck查找未被引用的对象:

git fsck --lost-found

Git会在.git/lost-found/目录下生成一些文件,你可以查看这些文件的内容,看看是不是你丢失的文件。不过这个方法比较繁琐,适合其他方法都失效的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:34:50