文件已修改且未跟踪

时间:2017-06-28 14:39:55

标签: git

为什么我要问这个问题

以下git status输出显示已删除和未跟踪的文件:

$ git status
On branch bugfix/1386ReferredBySlow
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified:   Broker/Controllers/InHouseAgentsController.cs
modified:   Broker/Web.config
deleted:    CompanyNameEnterprise.EF/App.Config
modified:   CompanyNameEnterprise.Services/Web.config
Untracked files:
 (use "git add <file>..." to include in what will be committed)
CompanyNameEnterprise.EF/App.config

文件CompanyNameEnterprise.EF/App.config既被“删除”又被“未跟踪”。这两个国家似乎是矛盾的。

问题

git在什么情况下可以显示文件是未跟踪和删除的?

更多信息

  • Windows 10
  • git version 2.13.0
  • VisualStudio / C#项目

我们如何解决它。

我的同事通过重新克隆项目来解决问题(并破坏了证据)。但我想知道为什么会发生这种情况,所以我们知道下次该做什么。

3 个答案:

答案 0 :(得分:5)

似乎问题与忽略文件名的大小有关:未跟踪的文件名有一个小写的&#39; c&#39;而删除的一个大写&#39; C&#39;也许该文件已重命名?!

我认为core.ignorecase配置变量可以提供帮助:doc(如果设置不正确,则不行。)

  

如果为true,则此选项启用各种变通方法,以使Git能够更好地处理不区分大小写的文件系统,如FAT。 ...

使用git config --get --show-origin core.ignorecase检查其值和来源。

答案 1 :(得分:1)

当您删除文件,将删除添加到舞台并重新创建此文件时,会发生这种情况。文件将出现在分段和未跟踪的部分。

您可以使用git diffgit diff --staged

查看详细信息

重现的步骤:

  1. 使用git rm file
  2. 删除文件
  3. 使用非git工具重新创建此文件
  4. 您可以在分段和未跟踪的部分中查看您的文件。使用git diff --staged查看添加前的更改,git diff查看添加后的更改
  5. Screenshot after remove and restore

    编辑文件,添加更改到舞台并再次修改文件时,会出现类似的情况。您的文件将显示在已暂存和未暂存的部分中。 (即在git add -p)部分加入后

    Screenshot after double edition

答案 2 :(得分:1)

CompanyNameEnterprise.EF/App.config不是modified,而是deleted。换句话说,它存在于最后一次提交中,但不存在于索引中(也称为“暂存区域”)。

确实没有跟踪,即存在于磁盘上但不在索引中。

总而言之,它存在于最后一次提交和磁盘上,但不存在于索引中。例如,在文件上运行git rm --cached之后就会发生这种情况。