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

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

在分支机构主管

无需提交,工作目录干净

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

somerandomguy asked 2019-10-07T19:48:59Z
17个解决方案
79 votes

我曾经有一个问题,曾几何时我在文件上将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索引。

ThorSummoner answered 2019-10-07T19:49:37Z
12 votes

另一个可能的原因(在我当前的情况下,这是事实)。 检查您的.gitignore文件。 您可能会发现.gitignore中列出了您要使用的文件或文件扩展名,该文件或文件的扩展名解释了为什么无法将其识别为更改的文件。

Marc Eliot Stein answered 2019-10-07T19:50:02Z
7 votes

好吧,我们没有足够的答案来回答这个问题,所以我给你几个猜测:

1)您保存了更改,以修复类型:git reset --hard

2)您进行了更改并提交了更改,您应该能够在git reset --hard中看到您的提交

3)您所做的更改做了某种git reset --hard或其他操作,您的更改可能在reflog中,键入git reflog --all,然后如果您确实找到它,则签出或挑选该ref。

4)您已多次签出同一仓库,但您输入的是错误的仓库。

Grady Player answered 2019-10-07T19:50:55Z
4 votes

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

当我进入Team菜单上的commit时,它们都将重新设置为忽略。 据我所知,这是因为我将它们设置为在父项目中派生的。 取消标记为dervied即可解决此问题。 我以前从未在Indigo上看到过这个。 希望对大家有所帮助。

Joseph Lust answered 2019-10-07T19:51:29Z
3 votes

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

Balraj Gill answered 2019-10-07T19:51:55Z
2 votes

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

我的故事有点有趣,但我认为可能会遇到一个可能遇到类似情况的人,因此请在此处分享。

实际上,在我的机器上,我有两个单独的git存储库repo1repo1配置在名为2559200397231653853890的同一根目录中。这两个存储库实质上是我在公司内使用和使用的两个产品的存储库。 现在,作为标准指南,所有产品的源代码目录结构在我公司中完全相同。

因此,在没有意识到的情况下,我在repo1中修改了一个完全相同的命名文件,应该在repo1中进行更改。因此,我只是在repo1上运行命令git status,并且始终给出相同的消息

在分支机构主管

无需提交,工作目录干净

半个小时。 然后我的一位同事将其视为独立的双眼,这使我意识到我错了,但外观很相似。 我切换到repo1的那一刻,Git开始注意到已更改的文件。

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

RBT answered 2019-10-07T19:53:01Z
2 votes

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

在Windows上,git status会使用文件的时间戳和文件大小的变化来确定文件是否已更改。 因此,由于时间戳记未更新,因此只有文件大小可以通过。 不幸的是,该文件是一个简单的版本文件,其内容从7.1.2更改为7.2.0。 换句话说,文件大小也保持不变。 其他文件也被WinMerge更改了并且没有更新其时间戳,但是在更改之后,通过git status可以很好地检测到其他文件的大小。

antred answered 2019-10-07T19:53:35Z
2 votes

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

Monroe Mann answered 2019-10-07T19:54:04Z
1 votes

通常,与这个问题有关,请首先检查您是否正在编辑自己认为的文件! 当我在编辑一个转译的JavaScript文件而不是源文件时遇到了这个问题(转译的版本不在源代码控制下)。

Chris Halcrow answered 2019-10-07T19:54:32Z
0 votes

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

希望能帮助到你。

Paxi answered 2019-10-07T19:55:01Z
0 votes

我有这个问题。 我的无法使用,因为我将文件放在项目内的.git文件夹中。

Lafsnb answered 2019-10-07T19:55:28Z
0 votes

我的Git客户(Gitg)为我造成了这个问题。 我通常会运行的普通命令无法正常工作。 即使触摸项目中的每个文件也不起作用。

我找到了解决它的方法,但我仍然不确定是什么原因造成的。 复制您的项目目录。 丢失的文件将显示在复制的目录git status中。重命名可能会执行相同的操作。

kagronick answered 2019-10-07T19:56:02Z
0 votes

您是否已将目录从shell下移出? 如果您从备份中还原了项目,则可能会发生这种情况。 要解决此问题,只需将cd取出并重新放入:

cd ../
cd -
SilverWolf answered 2019-10-07T19:56:30Z
0 votes

有时取决于git版本,如果您忘记做git status

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

onalbi answered 2019-10-07T19:57:05Z
0 votes

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

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

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

StevenWernerCS answered 2019-10-07T19:57:47Z
0 votes

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

zar answered 2019-10-07T19:58:15Z
-5 votes

尝试使用git add *然后git commit

Tih Haur answered 2019-10-07T19:58:44Z
translate from https://stackoverflow.com:/questions/16993082/why-doesnt-git-recognize-that-my-file-has-been-changed-therefore-git-add-not-w