在这种情况下,恢复文件的“最佳实践”推荐方法是什么:
用户在她的Linux工作区中修改文件。她运行一个“ git add”并分阶段进行。她没有承诺。时间流逝。她不小心使用'/ bin / rm'(不是'git rm')删除了所有修改后的文件。
现在,“ git状态”将其报告为“已删除”(正确)。建议为每个命令运行“ git reset HEAD 文件”和“ git checkout-文件”(不正确)。这导致每个版本的最新(HEAD)版本都保留在她的工作空间中,而不是包含已分阶段更改的版本。除了运行'git fsck'并尝试解析各种SHA引用外,用户现在应该怎么做才能恢复她最初进行的更改?
答案 0 :(得分:1)
如果添加了文件但未提交,则它们最初位于索引/阶段。使用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
是一个选择,但我从未使用过。