在这种情况下恢复文件的"最佳实践"推荐方法是什么:
用户修改其 Linux 工作区中的文件。她运行一个"git add"并将它们分期。她没有犯。时间流逝。她意外地使用"/bin/rm"(不是"git rm"(删除了所有修改的文件。
现在,"git 状态"将它们报告为"已删除"(正确(。它建议为每个运行"git reset HEAD 文件"和"git checkout- 文件"(不正确(。这导致每个版本的最新 (HEAD( 版本保留在她的工作区中,而不是包含她的暂存更改的版本。除了运行"git fsck"并尝试解析各种 SHA 引用之外,用户现在应该做什么来恢复她最初暂存的更改?
如果文件已添加但未提交,则它们最初位于索引/阶段中。使用rm
后,第二个建议(即git checkout -- <file>
( 由git status
给出是正确的,因为它将文件从索引中签出并签入工作目录。
我假设您已经按以下顺序运行了列出的两个命令:
git reset HEAD <file>
git checkout -- <file>
遗憾的是,这导致 reset 命令首先从索引中删除暂存文件,将其恢复到较早的已提交版本并放弃这些更改。然后结帐将此文件放入目录中。
您可以轻松测试这一点:
git init
echo "my content" > somefile.txt
git add somefile.txt
git commit -am "commit"
echo "more content" >> somefile.txt
git add somefile.txt
rm somefile.txt
git status
git checkout -- somefile.txt
现在git-recover
可能是一种选择,但我从未使用过它。