132

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

在分支主

没有什么可提交的,工作目录干净

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

4

29 回答 29

169

我有一个问题,曾几何时,我在我的文件中将 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仅从索引中删除文件的方法,并告诉resetgit 从上次提交中重新加载 git 索引。

于 2014-06-19T21:25:22.530 回答
28

检查您的.gitignore文件。您可能会发现您尝试使用的文件、文件扩展名或文件路径与 中的条目匹配.gitignore,这可以解释为什么该文件被忽略(并且不被识别为更改的文件)。

当我遇到类似问题时,事实证明我就是这种情况。

于 2017-01-11T14:05:56.967 回答
22

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

于 2018-12-14T17:54:40.693 回答
13

就像已经讨论过的那样,这些文件可能被标记为“assume-unchanged”,这基本上告诉 git 你不会修改这些文件,因此它不需要跟踪它们的更改。但是,这可能会影响多个文件,如果它是一个很大的工作区,您可能不想一个一个地检查它们。在这种情况下,您可以尝试: git update-index --really-refresh

根据文档:

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

它基本上会强制 git 跟踪所有文件的更改,而不管“假定未更改”标志如何。

于 2019-05-21T11:45:55.433 回答
7

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

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

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

3)您进行了某种git reset --hard或其他的更改,您的更改可能存在于 reflog 中,键入git reflog --all然后签出或挑选 ref(如果您确实找到它)。

4) 你已经多次检查了同一个 repo,但你错了。

于 2013-06-07T21:29:04.647 回答
5

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

当我commit进入Team菜单时,它们都会重新设置为忽略。据我所知,这是因为我将它们设置为在父项目中派生的。将它们取消标记为已dervied修复。我以前从未在 Indigo 上看到过这种情况。希望它可以帮助某人。

于 2013-12-14T23:54:27.817 回答
5

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

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

然后目录出现在git status.

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

于 2021-01-01T20:22:06.923 回答
4

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

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

于 2018-05-17T08:46:31.443 回答
3

TL;博士; 你甚至在正确的存储库上吗?

我的故事有点有趣,但我认为它可能发生在可能有类似情况的人身上,所以在这里分享。

实际上,在我的机器上,我有两个单独的 git 存储库repo1repo2配置在同一个名为source. 这两个存储库本质上是我在公司工作和使用的两种产品的存储库。现在的问题是,作为标准指南,我公司所有产品的源代码目录结构都完全相同。

所以没有意识到我修改了一个完全相同的命名文件repo2,我应该在repo1. 所以,我只是继续运行命令git statusrepo1它一直给出同样的信息

在分支主

没有什么可提交的,工作目录干净

半个小时。然后我的同事将其视为独立的一双眼睛,并让我注意到我错了但看起来非常相似的存储库。我切换到repo1Git 的那一刻开始注意到更改的文件。

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

于 2018-02-27T06:09:21.280 回答
3

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

于 2018-07-19T00:09:21.183 回答
2

您是否将目录从外壳下移出?如果您从备份中恢复了项目,则可能会发生这种情况。要解决此问题,只需cd退出并返回:

cd ../
cd -
于 2018-05-09T17:07:31.220 回答
2
git update-index --really-refresh

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

于 2021-05-16T08:19:17.147 回答
1

当您在 Visual Studio 中编辑文件时,即使文件未保存,它也会立即列在 git 更改中。所以你需要做的只是手动保存文件(Ctrl+S 用于当前显示的文件或 Ctrl+Shift+S 用于所有项目文件),git bash 会选择它们。

于 2019-06-20T16:58:03.983 回答
1

它也发生在我身上,我尝试了上述方法,但没有任何帮助。然后解决方案是通过终端更改文件,而不是 GUI。我不知道为什么这有效但有效。在我从终端通过 nano 编辑文件后,git 将其识别为已更改,并且我能够添加它并提交。

于 2020-02-26T10:20:31.597 回答
1

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

于 2019-02-16T06:51:57.157 回答
1

遇到了这个问题,但它只有两个目录,我不知道这两个目录最终都被配置为 git 子模块。我不知道这是怎么发生的,但过程是按照这个链接上的一些说明进行操作,但不要删除目录(就像他最后所做的那样),而是这样做git add path/to/dir

于 2019-05-13T16:25:36.623 回答
1

一般来说,对于这个问题,首先检查您是否正在编辑您认为的文件!我在编辑转译的 JavaScript 文件而不是源文件时遇到了这个问题(转译的版本不受源代码控制)。

于 2017-12-01T04:59:02.467 回答
1

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

-f在我的情况下,使用提升到暂存的标志强制添加文件并解决了问题。

git add -f <path to file>
于 2021-01-13T07:27:35.750 回答
1

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

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

于 2017-12-13T18:29:49.587 回答
0

有时取决于 git 版本,如果你忘记做git add ..

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

于 2018-05-31T11:46:07.917 回答
0

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

于 2020-05-11T09:43:20.230 回答
0

如果您正在使用 VSCode 并切换到新机器,您可能会关闭 Autosave,因此即使您对文件进行了更改,git 也不会识别它们。

这解决了我的问题

于 2021-09-28T18:02:43.570 回答
0

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

于 2020-08-13T05:43:48.763 回答
0

当所有更改都在新目录中时,这发生在我身上。我添加了第一个文件

git add newdirectory/new.file

然后git status按预期显示目录中的其他文件。

于 2022-01-18T05:05:27.850 回答
0

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

希望能帮助到你。

于 2016-06-12T16:05:30.807 回答
0

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

它不创建符号链接,而是将源的深度副本复制到目标

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

于 2018-06-13T23:15:32.847 回答
0

以下对我有用:

git mv tesfile.js TestFile.js

有关更多详细信息,请查看:https ://stackoverflow.com/a/16071375/11677643

于 2021-12-13T21:26:41.677 回答
-1

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

于 2017-09-04T18:23:46.920 回答
-4

尝试使用git add * 然后git commit

于 2017-12-20T15:48:25.047 回答