Git checkout --恢复丢失的文件

jm2pwxwz  于 2023-09-29  发布在  Git
关注(0)|答案(3)|浏览(182)

我不小心删除了git仓库中的本地文件更改。他们没有被强迫,甚至被推。
我做了什么:git status(然后显示了没有提交的文件,我意外地删除了这个命令名为“smdr”的整个文件夹):git checkout -- smdr
然后文件更改消失。
我怎样才能恢复这些文件(在git checkout 之前将所有内容都恢复回来-- smdr命令)?

o8x7eapl

o8x7eapl1#

你不能和Git在一起。文件未提交,因此不在历史记录中。你只是得到了索引中的(不存在的)版本git checkout
你唯一的希望就是你的备份系统。

m3eecexj

m3eecexj2#

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

Git reflog

输入git reflog并 checkout 你需要的提交,它会将你的仓库“恢复”为“已删除”的提交。

Git恢复

另一个选项是使用git revert SHA-1,这将恢复您的提交。它将简单地撤消您的更改

Git重置

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

d6kp6zgx

d6kp6zgx3#

除了Matthieu Moy's accepted answer之外,我发现我们可以遵循这个明显但令人惊讶的好实践,以防止此类“结帐”事故再次发生。
“还有一个疯狂的想法:不要在肮脏的工作树上运行'git checkout...'。问题解决了。”
这(1)是我在使用git checkout .丢弃任何未暂存/未提交的更改后停止的最多的一次。我现在使用的命令,这是作出更适合这一点:git reset
git reset用于取消暂存更改,git reset --hard用于当您完全确定要永久放弃更改时。git stash也是你的好朋友,在你丢弃它们之前把它们藏起来不会有什么坏处。
让这两个成为一种习惯,并使用git checkout只在分支之间切换(大多数情况下)对我来说非常好。

更新:一年后,我采用了两种新的做法,并且已经使用了很长一段时间,这可能会有所帮助。我已经将git reset替换为较新的git restore。我合并它和“你确定吗?“bash(2)中的确认函数以获得额外的注意。confirm && git restore .现在是我删除所有未暂存更改的首选命令。

第二个是checkout-p, --patch选项(它适用于许多其他命令,如add,这非常有用)。它允许您交互式地选择带有确认的代码块。因此,如果你只想删除一些更改,git checkout -p现在更安全了,默认情况下它不会影响阶段性更改。
(1)fr 0 sty于2010年5月13日在Hacker News辩论中发表的评论的相关部分。我从VonC for "Get back the changes after accidental checkout?"的答案中得到了这个
(2)在the answer for "In Bash, how to add 'Are you sure [Y/n]' to any command or alias?"中,了解如何创建用于重要命令的通用确认函数。

相关问题