通过 *NIX'rm' 删除后恢复暂存文件的最佳方法?



在这种情况下恢复文件的"最佳实践"推荐方法是什么:

用户修改其 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可能是一种选择,但我从未使用过它。

最新更新