我正在尝试使用bash将我的文件推送到github。他们已经在那里,我正在使用新的代码和代码等上传新版本。但是,当我尝试git add
然后git status
时,它会说:
在分支主机上
无需提交,工作目录清理
我正在使用的文件刚刚修改过。
答案 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存储库repo2
和source
。这两个存储库基本上是我在公司工作的两种产品的存储库。现在的问题是,作为标准指南,我公司所有产品的源代码目录结构完全相同。
所以没有意识到我修改了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