修改后的文件在Git中显示但未更新的问题?

9

我有一些文件/文件夹无法从Git暂存区中移除?

# On branch master
# Changed but not updated:
#   (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:   JavaScript/Stand.ard.iz.er (modified content, untracked content)
#   modified:   Site (untracked content)
#   modified:   Template Archives/Template (modified content, untracked content)
#   modified:   Template Archives/Template_Git (modified content, untracked content)
#

我已经尝试了各种方法来提交这些“修改过的”文件,但都没有成功?

我已经尝试了...

git add .
git add *
git add -u
git add {actual full directory path}

...但是这些都没有起作用。

有什么想法吗?

谢谢。

2个回答

14

这些可能是子模块,此时它们的状态将从父存储库的状态中显示。

除非您使用git status--ignore-submodules[=<when>]选项:

在查找更改时忽略子模块。
<when>可以是“none”、“untracked”、“dirty”或者默认的“all”。

  • 使用“none”将认为子模块被修改了,当它包含未跟踪或已修改的文件或其HEAD与记录在超级项目中的提交不同时,它可以用于覆盖在git-configgitmodules中设置的任何ignore选项。
  • 当使用“untracked”时,当子模块仅包含未跟踪内容时,将不认为子模块是脏的(但仍会扫描其修改的内容)。
  • 使用“dirty”将忽略子模块的所有工作树更改,仅显示存储在超级项目中的提交的更改(这是1.7.0之前的行为)。
  • 使用“all”隐藏所有子模块的更改(并抑制了设置config option status.submodulesummary时的子模块总结输出)。

无论如何,在能够上一级(父存储库级别)并看到干净状态之前,您都需要先在子模块内添加并提交。


如果它们一直显示为已修改,我该如何清除我的存储库中的“修改内容”? - Trip
1
@Trip:进入该子模块,执行 git add . 操作,提交更改,然后返回到父存储库:git status 将显示干净的状态。 - VonC
1
@Vonc,我按照你的指示操作了一下,现在父级目录上的git status显示出了bundle/supertab (new commits)。但是如果我回退一步,发现git status并没有显示修改的内容,但是如果我尝试提交,仍然会看到modified: bundle/supertab (modified content)。你知道我能否摆脱这个问题吗? - Pablo Olmos de Aguilera C.

11

如果您将一个包含.git文件夹的新文件夹复制到已有的项目中,就会发生这种情况。这样,它就像是主存储库中的子存储库。解决方法就是删除新复制子文件夹中的.git文件夹。


除非删除了.git文件夹,否则在该文件夹中进行的任何更改都不会被父存储库跟踪。至少在我使用的git v1.8.3.1版本中是这样的。 - Zoltan Fedor
1
你还需要执行 git rm --cached submodule_path # 删除子模块 HEAD 的引用(没有尾部斜杠) 来让 Git 忘记这个子模块。 - Zoltan Fedor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接