未分级更改将文件显示为已删除,即使它已存在

时间:2017-11-05 13:30:17

标签: git

我的存储库中的文件让我很头疼。 git status在“未提交的提交更改”下显示为“已删除”,并且还显示“未跟踪文件”下的完全相同的文件!该文件非常明确地存在于我的磁盘上以及远程存储库中。如果我删除该文件,“未跟踪文件”中的条目将消失,但另一个文件将保留。

现在我的问题:这有什么意义?我该如何解决?

$ git checkout -- .

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    deleted:    solution02/exercise02.txt 

Untracked files:
  (use "git add ..." to include in what will be committed)

    solution02/exercise02.txt

no changes added to commit (use "git add" and/or "git commit -a")

$ git status --short
 D "solution02/exercise02.txt "
?? solution02/exercise02.txt

$ rm solution02/exercise02.txt

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    deleted:    solution02/exercise02.txt 

no changes added to commit (use "git add" and/or "git commit -a")

$ git status --short
 D "solution02/exercise02.txt "

只是为了澄清:第一个git status是对我没有任何意义的那个,因为它在“未提交的更改”下将文件列为“已删除”。但该文件未被删除。它存在。

2 个答案:

答案 0 :(得分:2)

当文件被巧妙地重命名时,会发生这种情况。即什么时候磁盘上的名称与Git存储库中的名称不匹配,甚至认为两个名称在视觉上匹配。例如:

  • 如果名称包含非ascii字符(重音字母),则可以为同一字符编码。由于例如UTF-8规范化,Mac OS X下旧版本的Git存在已知问题。

  • 其中一个名称中可能只有空格更改(例如尾随空格)。 git status --short将显示有关文件名的更多详细信息(如果需要,可以在名称周围加上双引号,......),并且可能会有所帮助。

解决方案是将文件重命名为Git名称。对“已删除”名称进行精确剪切和粘贴可能会有所帮助。

编辑:在实际输出命令中更新之后,结果是第二个选项:在Git跟踪的文件名中“exercise02.txt ”之后有一个尾随空格。

答案 1 :(得分:-1)

如果您手动删除了该文件,它将在git status中显示为未跟踪的文件。但是如果您使用git rm filename删除了该文件,它将自动暂存,当您在此之后运行git status时,它将显示为已删除的文件。所以总结下面的2个命令

  rm filename
  git add filename

相当于一行命令 git rm filename

在您结帐到任何其他分支之前提交您的更改,因为它将显示为已更改的文件,除非您提交更改,即使您结帐到其他分支