【问题标题】:Git won't add modified fileGit不会添加修改过的文件
【发布时间】:2014-11-20 20:34:55
【问题描述】:

不知道为什么会这样:

git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

    modified:   file (modified content)

no changes added to commit (use "git add" and/or "git commit -a")
starkers@ubuntu:~/Documents/currentWork/protection_demo$ git add --all
starkers@ubuntu:~/Documents/currentWork/protection_demo$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

    modified:   file (modified content)

无论我做什么,git commit -amgit commit -a 文件都不会添加到提交中。有什么帮助吗?

【问题讨论】:

  • git add &lt;file&gt; 呢?
  • 您应该发布相关文件的完整路径,而不是“文件”。另外,你在使用子模块吗?
  • 文件在你的 .gitignore 文件中吗?
  • @chooban 不过,无论跟踪的文件是否列在.gitignore 中,都无法在该文件中暂存更改。
  • 但是你不需要使用 --force 选项吗?

标签: git git-add


【解决方案1】:

我认为 Jubobs 的评论可能是正确的。你的“文件”是一个子模块吗?

此行(提交或丢弃子模块中未跟踪或修改的内容)不应出现在普通文件中。

这是我从 git status 得到的:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.txt

no changes added to commit (use "git add" and/or "git commit -a")

您不会在我的 README.txt 之后看到 (提交或丢弃子模块中未跟踪或修改的内容)(修改的内容)

所以你可能需要按照 git 的建议,处理子模块中的内容。

编辑:以前我认为是“git add”。可以解决问题,但现在我认为它不能。

【讨论】:

  • --allgit-add 的有效选项。从git-add 手册页:--all 不仅更新工作树有匹配&lt;pathspec&gt; 的文件的索引,而且更新索引已经有条目的索引。这会添加、修改和删除索引条目以匹配工作树。
  • 哦,是的,你是对的!我总是使用“git add”。 .我想现在我必须改用这个选项
  • 在我的情况下,我的子文件夹中有一个隐藏的 .git 文件夹。所以我把它删除了,问题就解决了
【解决方案2】:

我遇到了同样的问题。我个人的“啊哈”是我之前已将跟踪 .git 存储库文件添加到子文件夹,因此它被视为子模块。删除子文件夹中的 .git 后,它很高兴地加入了我的其余文件夹,作为根文件夹中一个 .git 文件的一部分。我什至不知道子模块,所以也许这对某人也有帮助。

【讨论】:

  • 我删除了意外创建的 .git 文件夹,状态得到修复。就我而言,我必须重命名文件夹/文件,然后推送到遥控器。就像变通一样。
  • 这里也一样。出于某种原因,在我从子文件夹中删除 .git 后,它完全停止跟踪它,就像它不存在一样。所以我也删除了父级的 .git 并重新提交了初始提交,因为这就是它的所有历史记录。
【解决方案3】:

有同样的问题,不知道为什么但是 .h 文件不会提交。

所以,我重命名了它,就 git 而言,这删除了原来的并创建了新的。然后我提交了这些更改。 Git 很高兴。

然后我把它改回来了。 git 再次乐于提交。

无法解释为什么会发生这种情况,但至少它已修复。

【讨论】:

  • 对我来说路径有问题。我有两个不同的路径指向同一个文件 MyDomain.Service/Folder/Folder/MyFile.cs 和 mydomain.service/Folder/Folder/MyFile.cs (注意大小写的不同)。当我从文件资源管理器中删除文件并添加一个具有相同代码的新文件时,它可以工作。谢谢!
  • 我相信这也发生在我身上。我在 Windows 上遇到了这个问题。现有的解决方案都没有指出我这边有什么问题。我重命名了文件,暂存,然后重命名回它们以前的文件名,然后暂存,一切都很好。
【解决方案4】:

不确定这是否相关,但我在 Linux 和 Windows 之间切换时遇到了同样的问题。我有 2 个文件,一个是 WEB.config,另一个是 web.config,因为 Windows 不区分大小写,它似乎很困惑。我重命名了提交的文件重命名了回来,再次提交似乎有作品。

【讨论】:

  • Mac OS 相同
【解决方案5】:

您可以通过三种方式添加文件

  • 如果要添加单个文件,请使用git add filenamewithpath

  • 如果要添加多个文件,请使用git add .

  • 一次你可以添加所有文件,你可以通过这个命令写提交信息

    git commit -a -m 'your commit message'

【讨论】:

  • 或简称git commit -am 'your commit message'
【解决方案6】:

伙计们!也许它会帮助某人,就我而言,git不想添加和提交文件,因为我试图从不包含git文件的深层嵌套文件夹中提交和添加。当我回到根文件夹时,它很容易添加和提交。

【讨论】:

  • 这是一个被忽视的解决方案,尤其是在 Windows 中。我刚刚从我深深嵌套的当前位置上移了一层,它就成功了。想知道这是否与 Windows 或 Git 中的长文件名限制有关?意思是,我当前位置的整个路径与我想要暂存的其他深层嵌套文件的整个路径相结合超出了限制? (我在 Windows 和 Git 中都启用了长文件名支持,但是……也许吧?)
【解决方案7】:

类似的事情也发生在我身上。无论我做什么,文件似乎都被修改了。在查看差异时,它像我在之前的提交中所做的那样发生了变化。该文件似乎总是被修改,即使在第一次提交之后也是如此。最后我删除了文件。提交了删除,看起来好像我删除了两个文件。然后再次添加文件。我以前从未见过的很奇怪的东西。

【讨论】:

  • 我有同样的事情。在我的情况下,该文件最近被重命名,知道发生了什么,但删除和重新制作(中间没有提交)允许添加它
  • 一模一样
【解决方案8】:

我遇到了同样的错误:

fatal: Cannot update paths and switch to branch 'develop' at the same time.

然后用git status:

$ git status
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   .gitmodules
        new file:   submodule_dir

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

        modified:   submodule_dir (modified content)

git diff 显示:

$ git diff
diff --git a/somedir b/somedir
--- a/somedir
+++ b/somedir
@@ -1 +1 @@
-Subproject commit some-commit-hash
+Subproject commit some-commit-hash-dirty

问题是我试图添加子模块存储库中尚不存在的分支。

【讨论】:

    【解决方案9】:

    这件事发生在我昨天,伙计,就我而言,原因是因为我试图从我的项目的子目录中调用 git。然后我使用了“git add --all”,它解决了问题,我也去了上面的正确目录,它也解决了问题。

    但我没有得到的是:为什么在世界上 git status 和 git --all 命令仍然在子目录中工作? .-.

    希望对您有所帮助 =)

    【讨论】:

      【解决方案10】:

      另一种选择是同一个文件在存储中并且与当前副本冲突。

      如果是这种情况,git stash drop - 将删除存储(与文件冲突)并允许您将修改后的文件添加到索引中。

      【讨论】:

        【解决方案11】:
        git reset .
        

        这对我有用。取消暂存所有准备好提交(修改的内容)文件的文件

        【讨论】:

          【解决方案12】:

          所以基本上如果你遇到(commit or discard the untracked or modified content in submodules) 这意味着你有(内部回购)即.git 文件在你的子文件夹中;并且最近对文件的更改尚未注册到这些(内部存储库)。

          1. 一种方法是更新(内部存储库),即 git [add &amp; commit] 内部存储库中的所有更改。

          1. 丢弃内部存储库。

          【讨论】:

            【解决方案13】:

            在我的例子中,我在同一个位置有两个同名的文件,只是大小写不同,git 似乎无法区分它们,所以它显示一个拼写错误的文件正在被修改(它显示了一个正确的差异) ,但我无法暂存/提交它。我的解决方案是从 git 中删除拼写错误的文件: git rm &lt;incorrectly spelled file&gt; 这删除了两个文件,所以我需要恢复拼写正确的文件:git checkout &lt;correctly spelled file&gt;

            【讨论】:

              【解决方案14】:

              备份有问题的文件。删除这些文件集,提交删除,推送一次到源。

              从备份中添加回文件并发出新的添加、提交和推送。问题将得到解决。

              【讨论】:

              猜你喜欢
              • 2014-10-12
              • 2013-03-23
              • 2011-10-30
              • 2020-06-02
              • 2019-02-02
              • 2018-12-17
              • 2020-02-29
              • 2020-04-27
              相关资源
              最近更新 更多