Git checkout -- 恢复丢失的文件

问题描述 投票:0回答:3

我不小心删除了 git 存储库上的本地文件更改。他们没有做出承诺,甚至没有被推动。

我做了什么: git 状态 (然后显示未暂存提交的文件,并且我意外地通过此命令删除了名为“smdr”的整个文件夹): git checkout -- smdr

然后文件更改消失。

我怎样才能恢复这些文件(在 git checkout -- smdr 命令之前生成所有内容)?

git local git-checkout undo
3个回答
14
投票

Git 做不到。这些文件尚未提交,因此它们不在历史记录中。您刚刚在索引中获得了带有

git checkout
的(不存在的)版本。

您唯一的希望是您的备份系统。


6
投票

您可以使用任何给定的选项:

Git 参考日志

输入

git reflog
并签出您需要的提交,它将“恢复”您的存储库到“已删除”的提交。

Git 恢复

另一个选项是使用

git revert SHA-1
这将恢复您的提交。它只会撤消您的更改

Git 重置

Git Reset 将检查给定 sha-1 的内容。它将把你的分支设置为与 SHA-1 相同的状态


1
投票

除了Matthieu Moy 接受的答案之外,我还发现了这个明显但令人惊讶的良好实践,我们可以遵循以防止此类“结帐”事故再次发生。

“这是另一个疯狂的想法:不要在肮脏的工作树上运行‘git checkout ...’。问题解决了。”

自从使用

git checkout .

 放弃任何未暂存/未提交的更改以来,这(1)对我来说是最让我停止的。我现在使用更适合此操作的命令:
git reset

git reset

 取消暂存更改,
git reset --hard
 当您绝对确定要永久放弃更改时。 
git stash
 也是您的朋友,在丢弃更改之前将其隐藏起来并没有什么坏处。

养成这两个习惯并仅使用

git checkout

 在分支之间切换(大部分)对我来说非常有效。


(1) fr0sty 2010年5月13日在

Hacker News辩论中评论的相关部分。我从 VonC 的“意外结账后取回更改?”的答案中得到了这个答案

© www.soinside.com 2019 - 2024. All rights reserved.