在Git子模块中修改了内容,但Git子模块显示为最新状态。

8

我无法将所做的更改推送到git子模块。我已经推送了主项目,并得到了以下信息:

mainProject$ git status
On branch myBranch
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:   example/submod (modified content)

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

但是当我试图推送子模块中的更改时,出现了以下错误:

submod$ git status
On branch dev
Your branch is up-to-date with 'origin/dev'.

git --version 的输出结果是:

git version 1.9.3 (Apple Git-50)

当我运行时,
mainProject$ git diff example/submod
Submodule example/submod contains modified content

这里发生了什么?我也无法将主项目的更改添加进来。
mainProject$ git add example/submod
mainProject$ git status
On branch myBranch
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:   example/submod (modified content)

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

5

您在子模块中检出的提交与主仓库中提交的不同。您可以通过以下方式检出子模块的相关提交:

git submodule update

如果您想要添加此子模块,请将其提交并与当前更改一起推送:

git add example/submod
git commit -m 'new commits in submodule'
git push origin myBranch

如果我运行git add example/submod,然后运行git status,我会得到相同的消息,即更改未暂存以提交 :( - glasspill
“git remote -v” 显示了什么?也许您输入了错误的远程地址?此外,检查您子模块中的“git diff HEAD..origin/master”。我猜问题是您的 dev 分支与 origin/master 不对齐。 - clash
远程仓库对于主仓库和子模块都是正确的。 - glasspill
糟糕,刚刚编辑了答案。请检查您的子模块中的“git diff HEAD..origin/master”。 - clash

3

我也遇到过这个问题,解决方法是需要移除子模块,然后重新添加。具体操作如下:

git submodule deinit PathTo/SubmoduleName
git rm PathTo/SubmoduleName
sudo rm -rf .git/modules/PathTo/SubmoduleName

git submodule add https://github.com/username/SubmoduleName.git

在此之后,我的项目现在显示正确,没有需要提交的更改。我猜这只是Git子模块实现中的一个bug。


1
在我的情况下,这只是我的愚蠢 - 我在错误的文件夹中:
  • mainProject显示“子模块修改内容”
  • submodule*显示“没有更改”
(*)错误是:
  • 我执行git status子模块文件夹子模块存储库实际克隆,让我们称之为〜/ workspace / mySubModuleRepo ,而我只是认为我正在〜/ workspace / mainProject / mySubModule /中执行此注释

1
您的项目中记录了子模块的内容(一个提交),并且您的子模块已经检查该提交(因为状态未提及提交ID的任何差异),但是自检出或提交以来,某些内容已被修改。

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