为什么git不能识别我的文件已被更改,因此git add无法正常工作

时间:2013-06-07 21:15:56

标签: git github

我正在尝试使用bash将我的文件推送到github。他们已经在那里,我正在使用新的代码和代码等上传新版本。但是,当我尝试git add然后git status时,它会说:

  

在分支主机上

     

无需提交,工作目录清理

我正在使用的文件刚刚修改过。

27 个答案:

答案 0 :(得分:82)

我遇到了一个问题,曾经有一段时间我将git索引设置为'假设不变'在我的文件中。

您可以告诉git停止忽略对文件的更改:

git update-index --no-assume-unchanged path/to/file

如果这没有帮助,重置可能足以应对其他奇怪的情况。


在实践中,我发现删除了缓存的文件并将其重置为工作:

git rm --cached path/to/file
git reset path/to/file

git rm --cached表示只从索引中删除文件,reset告诉git重新加载上次提交的git索引。

答案 1 :(得分:14)

另一个可能的原因(在我目前的情况下证明是真的)。检查您的.gitignore文件。您可能会发现您尝试使用的文件的文件或扩展名已列入.gitignore,这可以解释为什么它不会被识别为已更改的文件。

答案 2 :(得分:7)

我们没有足够的回答这个问题所以我会给你几个猜测:

1)您存储了更改,以修复类型:git stash pop

2)您进行了更改并且提交了它们,您应该能够在git log

中看到您的提交

3)你有某些git reset --hard或其他更改,你的更改可能在reflog中,键入git reflog --all然后检查或挑选参考如果你找到了它

4)你已经多次检查过相同的回购,而你却错了。

答案 3 :(得分:4)

有这样一个时髦的事情发生了。 Eclipse Kepler的git插件在.gitignore文件夹中自动将所有项目文件夹标记为忽略。

当我到commit菜单上Team时,他们都会回过头来忽略。据我所知,这是因为我将它们设置为父项目中的派生。将它们取消标记为dervied修复此问题。我以前从未在Indigo上见过这个。希望它有所帮助。

答案 4 :(得分:3)

就像已经讨论过的一样,文件可能被标记为“假定不变”,这基本上告诉git您不会修改文件,因此它不需要跟踪它们的更改。但是,这可能会影响多个文件,如果它的工作空间很大,则您可能不想一一检查所有文件。在这种情况下,您可以尝试: git update-index-真正刷新

根据文档:

Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.

基本上,它将强制git跟踪所有文件的更改,而不考虑“假定未更改”标志。

答案 5 :(得分:3)

使用 Sublime Text-3 时,我遇到了类似的问题。 在代码中进行了新的更改并将其保存后,当我尝试使用git add ./status命令时,响应为“分支已经是最新的”。 我发现,无论将更新保存在文本编辑器中,文件实际上都没有更改。 在其他编辑器中打开文件并保存对我有用的更改。

答案 6 :(得分:2)

TL; DR; 您是否在正确的存储库中?

我的故事有点滑稽,但我认为这可能发生在可能有类似情景的人在这里分享。

实际上在我的机器上,我在名为repo1的同一根目录中配置了两个单独的git存储库repo2source。这两个存储库基本上是我在公司工作的两种产品的存储库。现在的问题是,作为标准指南,我公司所有产品的源代码目录结构完全相同。

所以没有意识到我修改了repo2中我应该在repo1中更改的完全相同的命名文件。所以,我只是在git status上继续运行命令repo1并且它一直给出相同的消息

  

在分支主机上

     

无需提交,工作目录清理

半小时。然后我的同事把它看成是一双独立的眼睛,并且让我注意到这个东西我错了但看起来非常相似的存储库。当我切换到repo1时,Git开始注意到已更改的文件。

不常见的情况。但你永远不知道!

答案 7 :(得分:2)

我们在Windows上通过WinMerge工具传输差异来更改文件时发生了这种情况。显然WinMerge(至少在我的计算机上配置它的方式)有时不会更新它更改的文件的时间戳。

在Windows上, git status ,除其他外,使用文件的时间戳和文件大小的更改来确定文件是否已更改。因此,由于时间戳没有更新,所以它只有文件大小。不幸的是,有问题的文件是一个简单的版本文件,其内容从 7.1.2 更改为 7.2.0 。换句话说,文件大小也保持不变。其他文件也被WinMerge更改,并且没有更新时间戳,但是在 git status 检测到更改后有不同的大小。

答案 8 :(得分:2)

听起来很疯狂,但有时即使您认为自己不在正确的回购中。例如,您可能已经移动了父目录,但是却忘记了在文本编辑器中切换存储库。反之亦然:您在文本编辑器中位于正确的存储库中,但在命令行中却位于错误的存储库中。在第一种情况下,您可以在正确的文件中进行编辑,但是与在命令行中打开的文件夹不同,因此实际上是错误的文件。在第二种情况下,您实际上确实编辑了正确的文件,但是您的命令行git无法识别更改,因为您不在命令行的正确目录中。

答案 9 :(得分:1)

一般来说,首先要检查您是否正在编辑您认为自己的文件!我在编辑已编译的JavaScript文件而不是源文件时遇到此问题(转换后的版本不在源代码管理下)。

答案 10 :(得分:1)

我有一些 git 子模块配置错误。我转到 repo 的根目录并在以前具有 .git 文件夹的目录上发出这些命令:

git rm --cached sub/directory/path -f

然后目录出现在git status中。

为了以防万一,您可能需要在尝试之前制作一份您的存储库的副本。

答案 11 :(得分:1)

我遇到了同样的问题。我需要提交的文件也从未在 .gitignore 文件中声明。

在我的情况下,使用 -f 标记强行添加文件并修复了问题。

git add -f <path to file>

答案 12 :(得分:1)

在Visual Studio中编辑文件时,即使未保存文件,它也会立即在git更改中列出。因此,您要做的只是手动保存文件(对于当前显示的文件,请按Ctrl + S;对于所有项目文件,请按Ctrl + Shift + S),然后git bash会选择它们。

答案 13 :(得分:0)

我在使用vi编辑器的服务器中创建补丁文件时遇到了类似的问题。似乎问题在于间距。当我从本地推送补丁时,部署是正确的。

答案 14 :(得分:0)

我在这里遇到了同样的问题VS2015无法识别我的js文件更改,因此从存储库设置中删除了远程服务器,然后重新添加了远程URL路径解决了我的问题。

答案 15 :(得分:0)

这也发生在我身上,我尝试了上述方法,但无济于事。然后解决方案是通过终端而不是GUI更改文件。我不知道为什么这行得通,但是行得通。在终端git上通过nano编辑文件后,我将其识别为已更改,并且能够添加并提交。

答案 16 :(得分:0)

就我而言,做一个git reset --hard删除的文件并留了一些空文件夹。检查内容后,我发现目录为空。

但是git会忽略空文件夹。 (更正,git在跟踪内容时会忽略所有目录,不包含空文件夹。)

答案 17 :(得分:0)

git update-index --really-refresh

你可以试试这个推荐,它会更新你文件夹中的索引。

答案 18 :(得分:0)

遇到了这个问题,但是只有两个目录,我不知道这两个目录最终都被配置为git子模块。发生这种情况的方法我一无所知,但过程是按照此链接上的某些说明进行的,但不删除目录(如他在结尾处所做的那样),而是git add path/to/dir

答案 19 :(得分:0)

我有同样的问题。原来我有该项目的两个副本,并且我的终端在错误的项目文件夹中!

答案 20 :(得分:0)

确保从Git Bash for Windows内部创建符号链接(ln -s source dest)。

它不会创建符号链接,但会将源的DEEP副本复制到dest

我在Git Bash for Windows(版本2.16.2)的MINGW64终端上遇到与OP相同的行为,意识到我的“编辑”更改实际上是在原始目录中,而我的git bash命令来自深层副本保持不变。

答案 21 :(得分:0)

有时依赖于git版本,如果忘记执行git add .

要检查您对存储库使用的更改,请始终git status显示所有未跟踪和已更改的文件。因为git diff仅显示已添加的文件。

答案 22 :(得分:0)

您是否将目录从shell下移出?如果从备份还原项目,则会发生这种情况。要解决此问题,只需cd,然后返回:

cd ../
cd -

答案 23 :(得分:0)

我的Git客户端(Gitg)给我带来了这个问题。我通常运行的普通命令不起作用。甚至触摸项目中的每个文件都不起作用。

我找到了解决问题的方法,但我仍然不确定是什么造成的。复制项目目录。丢失的文件将显示在复制目录的git status中。重命名可能会做同样的事情。

答案 24 :(得分:0)

我有这个问题。我没有工作,因为我把我的文件放在项目中的.git文件夹中。

答案 25 :(得分:0)

您尝试上传哪种文件?现在我花了将近一个小时来上传我的CSS修改。但是这个css是从一个样式文件编译的,因此git只是忽略了它。当我更改了样式源时,一切正常。

希望它有所帮助。

答案 26 :(得分:-5)

尝试使用git add * 然后git commit