如何更改git子模块的HEAD

12

该项目有一个子模块并且指向该子模块的特定SHA(例如62726c)。

每次运行git submodule update --init时,子模块目录仅显示该SHA(62726c)的更改。

最近我对子模块进行了更改并推送了更改的SHA(f81611),但如上所述,子模块的HEAD仍指向旧的SHA 62726c

2个回答

13

执行git submodule update --init时,会将子模块检出到项目注册的版本,该版本未被更新,因此您总是看到它被还原。

要更改超级项目中子模块的版本,请将子模块检出到所需的SHA1:

git checkout f81611

从主项目中,您会看到子模块被列为已修改 (git status)。您需要提交此修改,就像子模块是普通文件一样:

git add <path-to-submodule>
git commit -m "Update submodule XX so that it does YY"

你好。你是否曾经遇到过主项目在检出子仓库的新版本后,在git status中未列出更改的问题? - Rafał Kopczyński

3
另一种选择是使您的子模块遵循特定的分支:
请参见“Git子模块:指定分支/标签

然后,对于所有已指定要遵循某个分支的存储库,git submodule update --init --recursive --remote就足以检出该分支的最新内容。
如果您推送的更改SHA(f81611)被推送到存储库的master上,则git submodule update --init --remote将更新用于主父存储库中的子模块存储库的内容。

1
如果子模块(及其子子模块)由不同的团队维护,则混合使用“--remote”和“--recursive”可能不可取,因为子模块维护者可能没有自己使用“--remote”测试其项目。一个例子是将Boost超级项目(https://github.com/boostorg/boost.git)作为子模块。 - Tanz87

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