为什么git中的所有文件突然被标记为删除?

为什么git中的所有文件突然被标记为删除?,git,Git,我有一个包含多个子模块的大型项目。我今天做的唯一不寻常的事就是 git reflog 它返回了一组提交 但是现在,几个小时后,当我准备提交一些更改时,git状态显示所有文件都需要再次添加,即所有文件都被删除,然后再次添加 git ls-files 不返回任何内容。 出了什么问题?我怎样才能解决这个问题呢?我在评论中要求澄清,所以如果我在这里推断的是错误的,我会在提供澄清后更新。但听起来你的意思是,工作副本都存在,但是git status可能会这样说 Changes to be committ

我有一个包含多个子模块的大型项目。我今天做的唯一不寻常的事就是

git reflog
它返回了一组提交

但是现在,几个小时后,当我准备提交一些更改时,git状态显示所有文件都需要再次添加,即所有文件都被删除,然后再次添加

git ls-files
不返回任何内容。
出了什么问题?我怎样才能解决这个问题呢?

我在评论中要求澄清,所以如果我在这里推断的是错误的,我会在提供澄清后更新。但听起来你的意思是,工作副本都存在,但是
git status
可能会这样说

Changes to be committed

  deleted: file1
  deleted: file2
  ...

Untracked files

  file1
  file2
  ...
这表明你的索引不知何故被删除了。这可能发生在
git rm--cached
git reset
的一些变体中。或者可能是
.git/index
文件被删除了

无论如何,如果情况是这样的话,你可以

git add .
在工作目录的根目录中,它应该是ok。然后,您将能够看到一个适当的
git状态
,将您正在进行的工作与当前提交进行比较


(我假设您仍然签出了预期的分支;您可能想检查一下。请记住,此时您要小心使用任何会影响工作目录的命令,因为您有未提交的更改,如果这些更改在提交之前丢失,git无法帮助您恢复,除非您继续并隐藏它们。)

我在评论中要求澄清,因此,如果我在这里推断的是错误的,我将在提供澄清后更新。但听起来你的意思是,工作副本都存在,但是
git status
可能会这样说

Changes to be committed

  deleted: file1
  deleted: file2
  ...

Untracked files

  file1
  file2
  ...
这表明你的索引不知何故被删除了。这可能发生在
git rm--cached
git reset
的一些变体中。或者可能是
.git/index
文件被删除了

无论如何,如果情况是这样的话,你可以

git add .
在工作目录的根目录中,它应该是ok。然后,您将能够看到一个适当的
git状态
,将您正在进行的工作与当前提交进行比较


(我假设您仍然签出了预期的分支;您可能想检查一下。请记住,此时您要小心使用任何会影响工作目录的命令,因为您有未提交的更改,如果这些更改在提交之前丢失,git无法帮助您恢复,除非您继续并隐藏它们。)

听起来您的工作目录的内容可能已被删除。您可以使用git reset--hard head将工作目录重置为head commit,如果您在发生此情况后已提交,则可以重置为上一次提交,如果您没有推送,则可以还原为上一次提交。@LightBender有多个本地更改。我认为git stash在这里不起作用,因为整个项目都会被隐藏起来,而整个项目都在GBs中。git reflog会破坏工作树吗?您可以比较最近几次提交以确定更改发生的位置,
git diff--stat HEAD~1 HEAD
git diff--stat HEAD~2 HEAD~1
,等等。如果您之前提交了一系列删除操作,则未完成的更改将非常棘手。隐藏是一个选项,但您可能会遇到大量冲突,在应用更改后进行阶段性更改时需要小心。@LightBender所有文件都标记为已删除。比较HEAD和HEAD~1是不好的,因为问题在于局部变化。隐藏不是一个选项,因为所有文件都将被隐藏。我相信,解决这个问题很容易。reflog会对存储库造成任何伤害吗?@infocloubled-No,运行
git reflog
不会损坏存储库。听起来您的工作目录的内容可能已被删除。您可以使用git reset--hard head将工作目录重置为head commit,如果您在发生此情况后已提交,则可以重置为上一次提交,如果您没有推送,则可以还原为上一次提交。@LightBender有多个本地更改。我认为git stash在这里不起作用,因为整个项目都会被隐藏起来,而整个项目都在GBs中。git reflog会破坏工作树吗?您可以比较最近几次提交以确定更改发生的位置,
git diff--stat HEAD~1 HEAD
git diff--stat HEAD~2 HEAD~1
,等等。如果您之前提交了一系列删除操作,则未完成的更改将非常棘手。隐藏是一个选项,但您可能会遇到大量冲突,在应用更改后进行阶段性更改时需要小心。@LightBender所有文件都标记为已删除。比较HEAD和HEAD~1是不好的,因为问题在于局部变化。隐藏不是一个选项,因为所有文件都将被隐藏。我相信,解决这个问题很容易。reflog会对存储库造成任何伤害吗?@infocloubled-No,运行
git reflog
不会损坏存储库。确实奇怪,因为我可以确认我既没有运行git rm也没有运行git reset。然而,在git添加之后,现在一切都很好。此外,从@LightBenders的评论来看,git重置HEAD进一步起到了帮助作用。我刚刚添加了--soft(git reset--soft HEAD)@infocloubled:很高兴你把它整理好了,但是作为将来的参考:命令
git reset--soft HEAD
没有任何作用
--soft
表示“只移动头部,不更改索引或工作树,
head
表示“头部应该移动到头部已经存在的位置”。确实很奇怪,因为我可以确认我既没有运行git rm也没有运行git reset。然而,在git添加之后,现在一切都很好。另外来自@LightBenders comme