恐怕这些命令行中的第一个无条件地从工作副本中删除了git暂存区中的所有文件。第二个文件取消转储已跟踪但已删除的所有文件。不幸的是,这意味着您将丢失对这些文件的所有未提交的修改。
如果要使工作副本和索引恢复到上一次提交时的状态,则可以(仔细地)使用以下命令:
git reset --hard
我说“小心”是因为git reset --hard
它将消除工作副本和索引中未提交的更改。但是,在这种情况下,听起来好像您只是想回到上一次提交时的状态,并且未提交的更改无论如何都已丢失。
更新:从您对Amber答案的评论中可以看出,您尚未创建任何提交(因为HEAD无法解析),所以这无济于事。
至于如何将这些管道的工作:git ls-files -z
和git diff --name-only --diff-filter=D -z
两个输出文件名列表分开与字节0
。(这很有用,因为与换行符不同,0
保证在类似Unix的系统上文件名中不会出现字节。)该程序xargs
实质上是从标准输入中构建命令行,默认情况下是从标准输入中获取命令行并将其添加到末尾命令行。该-0
选项说期望标准输入以0
字节分隔。 xargs
可能多次调用该命令以用尽标准输入中的所有参数,请确保命令行永远不会变得太长。
举一个简单的例子,如果您有一个名为的文件test.txt
,其内容如下:
hello
goodbye
hello again
...然后该命令xargs echo whatever < test.txt
将调用该命令:
echo whatever hello goodbye hello again
rm -f
不是git命令,没有--cached
选项。在执行之前,您的本地文件已被删除,git rm
因此我认为您不应该git rm
为任何事情负责。