如果 git 子模块没有指向最新的提交,如何更新它指向的提交?
How to update the commit a git submodule points to if it does not point at the latest commit?
我 fork 了一个包含一些子模块的 repo。在这些子模块之一中,我想更新代码,然后更新超级项目,使其指向我为修复子模块所做的提交。到目前为止我做了什么:
- fork 超级项目
- 分叉子模块
- 更改了超级项目中的
.gitmodules
文件以指向我的分支
git submodule update --init
在我本地克隆的超级项目
cd submodule
和 git checkout
子模块当前固定为 的提交
- 用我的更改更新了子模块并创建了一个新分支(否则我无法推送它,因为 HEAD 已分离)
commit
和 push
将对子模块的更改编辑到远程的新分支中
- cd
superproject
并在此处提交和推送更改
然而,当我 git clone superproject
并在其中执行 git submodule update --init
时,我仍然得到 'old' 提交而没有我的更改。但是,我需要它来获取包含我的更改的子模块版本,因为它是脚本的一部分。我哪里弄错了?
上面列出的尝试确实奏效了。子项目中的 CMakeLists.txt
总是检出子模块的硬编码提交,这导致了问题。
我 fork 了一个包含一些子模块的 repo。在这些子模块之一中,我想更新代码,然后更新超级项目,使其指向我为修复子模块所做的提交。到目前为止我做了什么:
- fork 超级项目
- 分叉子模块
- 更改了超级项目中的
.gitmodules
文件以指向我的分支 git submodule update --init
在我本地克隆的超级项目cd submodule
和git checkout
子模块当前固定为 的提交
- 用我的更改更新了子模块并创建了一个新分支(否则我无法推送它,因为 HEAD 已分离)
commit
和push
将对子模块的更改编辑到远程的新分支中- cd
superproject
并在此处提交和推送更改
然而,当我 git clone superproject
并在其中执行 git submodule update --init
时,我仍然得到 'old' 提交而没有我的更改。但是,我需要它来获取包含我的更改的子模块版本,因为它是脚本的一部分。我哪里弄错了?
上面列出的尝试确实奏效了。子项目中的 CMakeLists.txt
总是检出子模块的硬编码提交,这导致了问题。