撤消git签出覆盖未提交的文件

撤消git签出覆盖未提交的文件,git,git-checkout,Git,Git Checkout,我曾使用git checkout--$(git ls files-m)命令撤消某些文件上的gitrm。但是,我在没有提交的情况下修改了一些其他文件,这些文件已恢复到以前的提交状态,丢失了未提交的更改 有没有办法恢复这些更改? 我想没有git,因为更改没有添加到git中。在Mac电脑上,如果有帮助的话 谢谢 汤姆 “git签出真的会自动覆盖未提交的更改吗?” 2018年的答案仍然是“是”(刚刚用2.11测试) 2019年8月,Git 2.23就是这样,只是现在有了一个更好的版本 一个简单的git还

我曾使用git checkout--
$(git ls files-m)
命令撤消某些文件上的git
rm
。但是,我在没有提交的情况下修改了一些其他文件,这些文件已恢复到以前的提交状态,丢失了未提交的更改

有没有办法恢复这些更改?
我想没有git,因为更改没有添加到git中。在Mac电脑上,如果有帮助的话

谢谢 汤姆

git签出真的会自动覆盖未提交的更改吗?

2018年的答案仍然是“是”(刚刚用2.11测试)

2019年8月,Git 2.23就是这样,只是现在有了一个更好的版本

一个简单的
git还原。
还将从索引内容以静默方式还原工作树(因此,如果文件被修改但未添加到所述索引,其更改仍将丢失)


但至少有。

默认情况下,您无法将其取回,但在这种紧急情况下,您可能很幸运,能够通过以下方式检索到您意外被git checkout filename撞坏的文件:

  • 您仍然可以在文本编辑器中缓冲该文件(对于我,我有 在我的BBEdit文本编辑器中发现,如果打开它,我可以执行
    undo
    以取回文件(因为它倾向于加载到
    当前版本(如果磁盘上的文件已更改),然后保存
  • 此外,如果连续备份正在运行,您还可以 获取您编辑的版本。例如,Apple Time Machine可能
    我有一个不久前的版本

检查
git reflog
。在您的情况下可能会有所帮助。这就像一个可以重置的还原点列表。如果您对修改的内容进行了
git添加
,这些内容现在存储在存储库中,并将显示为“悬空blob”(使用
git fsck--lost-found
获取文件内容,但名称已消失)。如果没有……好吧,如果Time Machine备份了它们,你也许可以从那里得到它们。否则它们可能会消失。我没有添加git,Time Machine没有更改:(这个问题可以/应该概括为“git checkout真的会无声地覆盖未提交的更改吗?”在2018年,答案仍然是“是”(刚刚用2.11测试过)…只是意外/健忘的
git签出。
和再见,每个文件中都有待处理的工作!:-o没有警告,一句话也没有。似乎这可能是最令人高兴的结果。(互联网似乎对此默不作声,看看你的问题是如何得到零答案的。)或者,更糟糕的是:我甚至看到了它的理由,相当于说
格式c:
rm-r
不应该问,因为你故意发出了命令…:))我想我问一个堆栈溢出问题没有用,比如“为什么git checkout myfile会在没有警告的情况下覆盖对myfile的更改?”我只是在抱怨我们大家都知道的事情,不是吗?@matt最终,
git checkout
将退役(过时)。只有
git开关
git还原
将保留。git还原是否表现得更好?我的git太旧了,无法测试。@matt这就是我在中描述的:它仍然可以覆盖文件内容,但它很明确:你想要还原文件内容。酷,thx。我的直觉是这仍然是错误的:就像你不能swit一样ch分支如果您未提交的更改将被删除,您应该无法恢复到另一个提交的版本,至少在没有收到警告的情况下,如果这样做会删除您未提交/未添加的更改。但可能我只是希望有太多的牵手。:)