我不小心删除了 git 存储库上的本地文件更改。他们没有做出承诺,甚至没有被推动。
我做了什么: git 状态 (然后显示未暂存提交的文件,并且我意外地通过此命令删除了名为“smdr”的整个文件夹): git checkout -- smdr
然后文件更改消失。
我怎样才能恢复这些文件(在 git checkout -- smdr 命令之前生成所有内容)?
Git 做不到。这些文件尚未提交,因此它们不在历史记录中。您刚刚在索引中获得了带有
git checkout
的(不存在的)版本。
您唯一的希望是您的备份系统。
您可以使用任何给定的选项:
输入
git reflog
并签出您需要的提交,它将“恢复”您的存储库到“已删除”的提交。
另一个选项是使用
git revert SHA-1
这将恢复您的提交。它只会撤消您的更改
Git Reset 将检查给定 sha-1 的内容。它将把你的分支设置为与 SHA-1 相同的状态
除了Matthieu Moy 接受的答案之外,我还发现了这个明显但令人惊讶的良好实践,我们可以遵循以防止此类“结帐”事故再次发生。
自从使用“这是另一个疯狂的想法:不要在肮脏的工作树上运行‘git checkout ...’。问题解决了。”
git checkout .
放弃任何未暂存/未提交的更改以来,这(1)对我来说是最让我停止的。我现在使用更适合此操作的命令:
git reset
。
git reset
取消暂存更改,
git reset --hard
当您绝对确定要永久放弃更改时。
git stash
也是您的朋友,在丢弃更改之前将其隐藏起来并没有什么坏处。养成这两个习惯并仅使用
git checkout
在分支之间切换(大部分)对我来说非常有效。
Hacker News辩论中评论的相关部分。我从 VonC 的“意外结账后取回更改?”的答案中得到了这个答案