一个文件改坏了,其他文件里还有自己没提交的工作,怎样只撤回目标文件?先检查 Git 基线和修改范围,再决定是否做整文件恢复。
下面的命令会覆盖目标文件的工作区内容。只在确认该文件里的未提交改动都准备放弃、而 HEAD 确实是正确版本时使用。
先看差异与暂存区
在仓库目录执行:
1 | git status --short |
第三条帮助确认有没有已经暂存的内容。原演示没有暂存改动,check_products.py 里只有准备撤回的模拟误改,最后一次提交是正确基线。
如果同一文件里还混着要保留的修改,先逐块核对并留存它们,不要直接套下面的整文件命令。
只恢复指定文件的工作区
1 | git restore --source=HEAD --worktree -- check_products.py |
--source=HEAD 明确恢复来源,--worktree 指向工作区,-- 后面只列目标文件。它不会替你判断代码好坏,也不会把已经提交的误改自动找回到正确版本。Git restore 官方说明
随后再看 git status --short、目标文件差异,并运行相关测试。其他文件还在不代表内容一定没变,重要保留项也要核对。
原演示验证了哪些结果
2026年10月14日,在 Windows 的隔离 Git 仓库里,人为把“数值必须大于0”改为“允许0”,模拟错误。测试出现2处失败;另一个文件有未提交补充,还有一个未跟踪草稿。
恢复目标文件后,内容与基线一致,6项测试通过。其他补充与草稿保留,内容校验一致。这是教学模拟,不是 Codex 真实失败记录。
交给 Codex 时,可以先让它只读检查:
1 | 列出目标文件准备撤回的内容、恢复来源和必须保留的修改。 |
没有正确 Git 基线、目标文件混有有价值的修改,或错误已提交时,需要另行选择恢复办法。博客于2026年10月27日整理,未重新执行恢复实验。