一个分支增加了一个文件,然后Main分支Merge了,但是后面,Main分支不小心删掉了这个文件,怎么恢复这个文件?

Created: 05 Jan 2026

Author:  Chen Xie

摘要

如果还有分支有这个文件

# 无需切换分支,直接从原分支将文件检出到当前工作区
$ git checkout origin/feature-branch <文件路径>
#本地其他分支
$ git checkout [feature-branch] <文件路径>

详解

理解您遇到的问题了。一个文件被合并到主分支后又意外被删除,恢复起来并不复杂,因为 Git 会完整记录所有的提交历史。您可以通过下图快速了解整个恢复流程,并根据您的具体情况选择最合适的路径。

具体应该采用哪条路径,取决于“原分支是否还存在”以及“您更倾向于哪种操作方式”。下面是每个步骤的详细说明。

🔎 定位文件或删除点

恢复的关键是找到文件“最后存在”的那个时间点。

🛠️ 选择恢复方案

找到文件或提交哈希后,您可以根据情况选择下面三种方法之一。

方案一:从原分支直接检出(推荐,如果分支存在)

如果原分支存在且文件完好,这是最直接的方法。

# 无需切换分支,直接从原分支将文件检出到当前工作区
$ git checkout origin/feature-branch -- <文件路径>

执行后,文件会直接出现在您的当前工作目录的暂存区中。

方案二:从历史提交中检出文件

这是最通用和可靠的方法,适用于大多数场景,尤其是当原分支已经不存在时。

# 使用上一步找到的提交哈希
$ git checkout <提交哈希> -- <文件路径>
# 示例: git checkout a1b2c3d -- src/new_feature.py

这个命令会从指定的历史提交中,将文件还原到您当前的工作区。

方案三:反转删除提交

如果删除操作已经推送到远程仓库,为了避免重写历史,使用 git revert是更安全的选择。它会创建一个新的提交来撤销之前的删除操作。

# 找到删除文件的那个提交的哈希值
$ git revert <删除操作的提交哈希>

执行后,Git 会生成一个新的提交,这个提交的内容就是将被删除的文件恢复回来。

✅ 完成恢复

无论使用方案一还是方案二,文件恢复到此只是回到了你的 工作区​ 或 ​暂存区。你需要执行一次提交,将这次恢复操作正式记录到版本历史中。

# 将文件添加到暂存区(如果方案二后未自动添加)
$ git add <文件路径>

# 提交更改
$ git commit -m "恢复被误删的文件: <文件路径>"

对于方案三(git revert),Git 会自动完成提交步骤。

💡 核心决策建议

为了帮助你更好地选择,可以记住这个原则:

希望这份详细的指南能帮助你顺利恢复文件!如果你在操作中遇到任何问题,比如找不到提交哈希,可以随时告诉我。

# git github