Git Rebase后新建文件丢失,如何找回代码?
找回Git Rebase中丢失的新文件
别慌,这种情况Git其实已经帮你把文件内容存在历史提交里了,咱们一步步把它找回来:
1. 定位包含丢失文件的提交
首先运行这个命令查看你的Git操作日志:
git reflog
你会看到类似这样的记录:
abc123 HEAD@{0}: rebase: checkout main def456 HEAD@{1}: commit: Add new feature files
找到那个你确定还存在新文件的提交(比如上面的def456,就是你rebase前提交新文件的记录),复制它的哈希值。
2. 恢复丢失的文件
根据你的需求选下面的方法:
方法一:直接恢复单个/指定文件
如果你记得具体的文件名,直接用这个命令把文件从目标提交提取到工作区:
git checkout <提交哈希> -- <文件名> # 例子:git checkout def456 -- MyNewViewController.swift
如果不确定文件名,可以先查看该提交下的所有文件:
git ls-tree --name-only -r <提交哈希>
找到你丢失的文件后,再用上面的checkout命令恢复。
方法二:临时分支批量恢复(适合多个文件)
如果丢失了多个文件,或者想先完整确认内容,建议创建一个临时分支:
# 基于目标提交创建临时分支 git branch temp-recovery <提交哈希> # 切换到临时分支 git checkout temp-recovery
这时候你就能在工作区看到所有丢失的文件了,把它们复制到你原来的开发分支(比如git checkout main切回去,再把文件复制过来),确认没问题后可以删除临时分支:
git branch -d temp-recovery
方法三:用git restore(Git 2.23及以上版本)
如果你用的是较新的Git版本,也可以用更清晰的git restore命令:
git restore --source=<提交哈希> <文件名> # 例子:git restore --source=def456 MyNewModel.swift
3. 后续处理
文件恢复后,记得把它们重新加入Git追踪(因为之前的删除操作可能让它们变成未追踪状态):
git add <恢复的文件名>
之后你可以继续处理rebase的冲突,或者提交这些恢复的文件。
内容的提问来源于stack exchange,提问作者Joel Tecson
相关产品推荐
相关产品推荐

