如何更新 git 子模块
How to update git submodule
我刚刚在应用中做了一个git merge <merging_branch_name>
,解决了很多冲突。
但是当我执行 git status
时,我可以在消息中看到带有(新提交)的子模块列表。
看起来子模块 (branch/tag) 版本尚未更新。
例如:
modified: plugins/myplugin.git (new commits)
如何使用版本更新子模块(使用 <merging_branch_name>
)
我在 git bash
中得到了这样的结果
my_app (current_branch |MERGING),
所以当我git status
时,我得到如下子模块列表
modified: plugins/plugin1.git (new commits)
modified: plugins/plugin2.git (new commits)
modified: plugins/plugin3.git (new commits)
modified: plugins/plugin4.git (new commits)
我该如何解决这个问题?
要将子模块内容更新为新的 SHA1,这应该足够了:
# the submodule content needs to be updated
git submodule update --init
# the parent repo needs to record the new submodule SHA1
git add plugins/myplugin
假设您有两个分支 master
和 hotifx
。在 master
中,子模块的头部位于 123456
中,在 hotfix
中位于 abcdef
。 (假设 abcdef
比 123456
更新)。如果您已经检出 master
并合并 hotfix
子模块头部将移动到 abcdef
但子模块中的代码不会检出到这个新头部。如果您现在输入 git diff
,您将看到子模块指向 123456
,但这是不正确的,因为您要指向 abcdef
。
如果您现在输入
git add pathToSubmodule
旧的 123456
已添加到索引中。这是错误的提交。你需要做的是将头部移动到正确的提交,这是通过简单的调用
git submodule update
子模块基本上指向在父 git 存储库中进行提交时使用的子模块中的特定提交。合并后,子模块似乎比合并后预期的 领先 。您有两个选择:
- 返回子模块当前指向的提交
- 更新您的父存储库以使用新的子模块状态
第一个选项被其他人指出为
git submodule update
第二个选项,我认为这就是你所要求的,已完成
git add plugins/plugin?.git
git commit -m 'update submodules'
这将更新您的 HEAD 状态以存储当前子模块引用。
你可以通过查看
来检查发生了什么
git ls-tree HEAD | grep 'plugin1.git'
更新子模块前后。将此引用与此插件中的当前提交进行比较:
cd plugins/plugin1.git
git rev-parse HEAD
我刚刚在应用中做了一个git merge <merging_branch_name>
,解决了很多冲突。
但是当我执行 git status
时,我可以在消息中看到带有(新提交)的子模块列表。
看起来子模块 (branch/tag) 版本尚未更新。
例如:
modified: plugins/myplugin.git (new commits)
如何使用版本更新子模块(使用 <merging_branch_name>
)
我在 git bash
中得到了这样的结果my_app (current_branch |MERGING),
所以当我git status
时,我得到如下子模块列表
modified: plugins/plugin1.git (new commits)
modified: plugins/plugin2.git (new commits)
modified: plugins/plugin3.git (new commits)
modified: plugins/plugin4.git (new commits)
我该如何解决这个问题?
要将子模块内容更新为新的 SHA1,这应该足够了:
# the submodule content needs to be updated
git submodule update --init
# the parent repo needs to record the new submodule SHA1
git add plugins/myplugin
假设您有两个分支 master
和 hotifx
。在 master
中,子模块的头部位于 123456
中,在 hotfix
中位于 abcdef
。 (假设 abcdef
比 123456
更新)。如果您已经检出 master
并合并 hotfix
子模块头部将移动到 abcdef
但子模块中的代码不会检出到这个新头部。如果您现在输入 git diff
,您将看到子模块指向 123456
,但这是不正确的,因为您要指向 abcdef
。
如果您现在输入
git add pathToSubmodule
旧的 123456
已添加到索引中。这是错误的提交。你需要做的是将头部移动到正确的提交,这是通过简单的调用
git submodule update
子模块基本上指向在父 git 存储库中进行提交时使用的子模块中的特定提交。合并后,子模块似乎比合并后预期的 领先 。您有两个选择:
- 返回子模块当前指向的提交
- 更新您的父存储库以使用新的子模块状态
第一个选项被其他人指出为
git submodule update
第二个选项,我认为这就是你所要求的,已完成
git add plugins/plugin?.git
git commit -m 'update submodules'
这将更新您的 HEAD 状态以存储当前子模块引用。
你可以通过查看
来检查发生了什么git ls-tree HEAD | grep 'plugin1.git'
更新子模块前后。将此引用与此插件中的当前提交进行比较:
cd plugins/plugin1.git
git rev-parse HEAD