我正在尝试使用 bash 将文件推送到 github。他们已经在那里,我正在上传一个新的版本与新的行和代码等。但当我尝试 git add然后 git status它说:
git add
git status
在树枝主人身上 没有犯罪工作目录
在树枝主人身上
没有犯罪工作目录
我正在使用的文件刚刚被修改过。
我们没有足够的证据来回答这个问题所以我给你们几个猜测:
1)您隐藏您的更改,以修复类型: git stash pop
git stash pop
2)你已经做了改动并提交了它们,你应该能够在 git log中看到你的提交
git log
3)你做了一些变化做了一些 git reset --hard或其他,你的变化可能在那里的重新测试,类型 git reflog --all然后检查或挑选裁判,如果你曾经找到它。
git reset --hard
git reflog --all
4)你已经检查了同一个回购几次,你是在错误的一个。
发生了这么奇怪的事。Eclipse Kepler 的 git 插件自动将我的所有项目文件夹标记为忽略。吉蒂诺文件夹。
当我在 Team菜单上找到 commit的时候,它们都会回到被忽略的状态。据我所知,这是因为我将它们设置为在父项目中派生的。取消标记作为 dervied修复这一点。我从没在《靛蓝》上看过这个。希望能有所帮助。
Team
commit
dervied
我曾经遇到过一个问题,我曾经将 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 索引。
git rm --cached
reset
你想上传什么样的文件?现在我花了将近一个小时上传我的 CSS 修改。但是这个 css 是由样式文件编译的,因此 git 忽略了它。当我改变风格的来源,然后一切工作。
希望能有帮助。
检查你的 .gitignore文件。您可能会发现文件、文件的扩展名或要处理的文件的路径与 .gitignore中的一个条目匹配,这将解释为什么该文件被忽略(并且不能识别为已更改的文件)。
.gitignore
当我遇到类似的问题时,情况就是这样。
我有这个问题。我的不工作,因为我把我的文件。 git 文件夹在我的项目。
对于这个问题,首先检查您是否正在编辑您认为正在编辑的文件!我在编辑传输的 JavaScript 文件而不是源文件时遇到了这个问题(传输的版本不在源代码控制之下)。
我的 Git 客户机(Gitg)导致了这个问题。我通常会运行的普通命令不起作用。甚至触摸项目中的每个文件都不起作用。
我找到了解决的办法,但我还是不知道是什么引起的。复制项目目录。丢失的文件将显示在复制目录的 git status中。重命名可能会做同样的事情。
尝试使用 git add * 然后是 git commit
git add *
git commit
您使用的是正确的存储库吗?
我的故事有点滑稽,但我认为它可以发生在某人谁可能有类似的情况,所以在这里分享它。
实际上,在我的机器上,我在同一个名为 source的根目录中配置了两个单独的 git 存储库 repo1和 repo2。这两个存储库实质上是我在公司中不断开发的两个产品的存储库。现在的问题是,作为一个标准准则,所有产品的源代码的目录结构在我的公司是完全相同的。
source
repo1
repo2
所以我没有意识到我修改了一个完全相同的命名文件在 repo2,我应该改变在 repo1。所以,我只是继续在 repo1上运行命令 git status,它一直给出相同的消息
半个小时。然后我的同事用独立的眼睛观察了它,并且让我注意到这个东西,我错了,但是看起来非常相似。当我切换到 repo1 Git 时,开始注意到文件的更改。
不是那么常见的情况。但你永远不知道!
你把目录从你的 shell 中移出来了吗?如果从备份中还原项目,就可能发生这种情况。要解决这个问题,只需要 cd输出和输入:
cd
cd ../ cd -
我们在 Windows 上通过 WinMerge 工具传输差异来更改文件时就发生过这种情况。显然,WinMerge (至少在我的计算机上是这样配置的)有时不会更新它更改的文件的时间戳。
在 Windows 上,Git 状态使用文件的时间戳和文件大小的更改来确定文件是否已更改。因此,由于时间戳没有更新,它只能通过文件大小。不幸的是,有问题的文件是一个简单的版本文件,其中的内容从 7.1.2更改为 7.2.0。换句话说,文件大小也保持不变。其他的文件也被 WinMerge 修改了,没有更新他们的时间戳,但是在修改后有不同的大小,被 Git 状态检测到了。
有时取决于 git 版本,如果你忘记做 git add .。
git add .
要检查对存储库的更改,始终使用显示所有未跟踪和更改的文件的 git status。因为 git diff只显示添加的文件。
git diff
确保 没有从 Windows 的 Git Bash 内部创建符号链接(ln -s source dest)。
ln -s source dest
它不生成符号链接,而是将源代码深度拷贝到目录
我在 Windows 的 Git Bash (版本2.16.2)的 MINGW64终端上经历了与 OP 相同的行为,意识到我的“编辑过的”更改实际上在原始目录中,而我的 Git Bash 命令来自一个深度拷贝,并且没有改变。
我在使用 崇高的文字-3时遇到了类似的问题。 在对代码进行了新的更改并保存之后,我尝试使用 git add。/status 命令的响应是“ Branch already-up to date”。 我发现,不管在文本编辑器中保存更新,文件实际上是不变的。 在其他编辑器中打开文件并保存更改对我来说很有效。
听起来很疯狂,但有时候你并不在正确的回购,即使你认为你是。例如,您可能已经移动了父目录,但是忘记在文本编辑器中切换回购协议。反之亦然: 您在文本编辑器中处于正确的回购中,但在命令行中处于错误的回购中。在第一种情况下,您在正确的 文件中进行编辑,但它与在命令行中打开的文件夹不同,因此实际上是错误的文件。在第二种情况下,您实际上编辑了正确的文件,但是您的命令行 git 不能识别更改,因为您不在命令行的正确目录中。
我也有同样的问题。原来我有两个项目的副本,我的终端在错误的项目文件夹!
遇到了这个问题,但是只有两个目录,我不知道的是,这两个目录最终都被配置为 git 子模块。这是怎么发生的我不知道,但过程是按照这个链接上的一些指示,但不删除目录(因为他在最后) ,而是做 git add path/to/dir
git add path/to/dir
正如我们已经讨论过的,这些文件可能被标记为“预设-未改变”,这基本上告诉 git 您不会修改这些文件,因此它不需要跟踪这些文件的更改。然而,这可能会影响到多个文件,如果工作区很大,您可能不希望逐个检查它们。在这种情况下,你可以尝试: Git update-index —— really-refresh
根据文件:
Like --refresh, but checks stat information unconditionally, without regard to the "assume unchanged" setting.
它基本上会强制 git 跟踪所有文件的更改,而不管是否使用“预设未更改”标志。
当您在 VisualStudio 中编辑文件时,即使文件没有保存,它也会立即在 git 更改中列出。所以你需要做的就是手动保存文件(对于当前显示的文件是 Ctrl + S,对于所有的项目文件是 Ctrl + Shift + S) ,然后 git bash 就会接收它们。
这种情况也发生在我身上,我尝试了上面提到的方法,但没有任何帮助。那么解决方案就是通过终端而不是 GUI 来更改文件。我不知道为什么这个工作,但工作。在我从终端 git 通过 nano 编辑文件之后,我发现文件被修改了,我可以添加并提交。
我有同样的问题在这里 VS2015没有识别我的 js 文件的变化,删除远程从存储库设置,然后重新添加远程 URL 路径解决了我的问题。
当我使用 vi 编辑器在服务器上创建补丁文件时,也遇到了类似的问题。看来问题出在间隔上。当我从本地推出补丁时,部署是正确的。
我有一些 git 子模块配置错误。我去了 repo 的根目录,并在以前有 .git文件夹的目录上发出了以下命令:
.git
git rm --cached sub/directory/path -f
然后目录出现在 git status中。
为了以防万一,你可能需要在尝试之前复制一份你的回购协议。
我也有同样的问题。我需要提交的文件也从未在 .gitignore文件中声明过。
在我的例子中,使用 -f标志强制添加文件提升到暂存并修复了问题。
-f
git add -f <path to file>
git update-index --really-refresh
您可以尝试此命令,它将更新您的文件夹中的索引。
如果您正在使用 VSCode 并切换到一台新机器上,那么您可能关闭了自动保存功能,因此即使您对文件进行了更改,git 也不会识别它们。
这解决了我的问题
以下几点对我很有效:
git mv tesfile.js TestFile.js
详情请浏览: https://stackoverflow.com/a/16071375/11677643
当所有的更改都在一个新目录中时,这种情况发生在我身上
git add newdirectory/new.file
然后 git status按预期显示目录中的其他文件。
尝试重命名 File,git 将识别添加文件的新更改。
例如,如果文件路径是 产品/index.tsx,那么您可以将路径重命名为: ProductItem/index.tsx.
在尝试了以上所有建议的解决方案之后,这个方法奏效了。
服从命令对我很管用
rm .git/index git reset
我有同样的问题后,谷歌驱动器桌面同步我的项目文件,Git 没有检测到变化。
我发现这个 git rm 缓存了 sudo 凭证。 然后不要做 git 重置,这只是重置 git 状态和设置一切回到发生问题的时间点。
因此,对于 Linux 和 Mac 来说,这样做效果很好:
`sudo git rm --cached -r .`
对于未来的读者: 我遇到过一个有趣的例子,我们试图将整个文件夹复制到一个 git 存储库中,却没有意识到我们也复制了。Git 文件夹。
由于索引的复制。Git 文件夹中包含了复制的文件夹内容,git 认为没有进行任何更改。
在我的例子中,解决方案是创建一个新的分支,并且只复制没有. git 文件夹的文件夹。
如果您正在使用 VSCode,则必须首先保存更改,然后 git 才能识别它们。
新闻稿:
窗口用 Ctrl + Shift + S
Ctrl
Shift
S
用于 Mac 的 Command + S
Command
现在又是 git status
重新启动窗口是我解决这个问题的唯一方法; 而关闭 powershell 窗口/Visual Studio 没有任何效果。
我在 Visual Studio 里看过,在编辑的时候,VS 会 视觉效果显示它的变化,很好。但是当我保存时,VS 和命令行 git status都不会显示它被更改。
再一次,我关闭了所有系统,重启了。
我也有同样的问题。在我的例子中,文本编辑器中的自动保存被关闭,因此这些更改不会在命令行中被检测到。我打开了自动保存,现在可以用了。
我们尝试了上述解决方案,但不幸的是,它没有工作在我们的最后。 后来我发现问题的原因是我的子目录有自己的 .ssh/目录。
.ssh/
所以我们这边的解决方案,
(1) -是删除子目录中的 .ssh/目录
/.ssh /frontend /.ssh <-----------delete this /backend /.ssh <-----------delete this
(2) -删除缓存
git rm --cached .
(3) -分阶段改变