我可以合并两个git子模块吗

问题描述 投票:0回答:1

我正在开发一个带有子模块的存储库。 我有一个分支 feature1 是从 master 分支分支出来的。 在我的 feature1 分支上,我对子模块中的一些文件进行了更改。 现在,我的 feature1 分支上的子模块和我的 master 分支上的子模块指向两个不同的哈希值:

feature_submodule -> 6c084...
master_submodule -> 7b325...

一些更改被另一个开发人员从另一个分支推送到master。因此,为了保持我的 feature1 分支与 master 同步,我将 master 合并到我的 feature1 分支中。但现在,我的 feature_submodule 不再指向 6c084 而是指向 7b3325,并且我对子模块文件所做的更改消失了。

有没有办法合并子模块,以便当我将更改推送到 master 分支时,我可以在本地对子模块进行更改,同时保留 master 分支上的更改?

运行

git pull --recurse-submodules
也只会覆盖我的本地子模块更改。

git github git-submodules
1个回答
0
投票

我写了这篇文章解释 Git 如何合并子模块,希望对你有帮助:https://lucasoshiro.github.io/posts-en/2022-03-12-merge-submodule/

我无法确切地弄清楚您的子模块发生了什么,但是,如果您在本地将 master 合并到 feature1 中,并将 6c084 替换为 7b3325,则会发生以下情况之一:

  • 7b3325 是 6c084 的后代提交
  • feature_submodule 上,masterfeature1 之间存在冲突(子模块指向的提交存在分歧)

如果您将您和其他开发人员引入的更改保留在 feature_submodule 上,那么您可以执行此操作(使其适应子模块的贡献工作流程):

  1. 进入子模块(cd feature_submodule)
  2. git checkout
    至 6c084
  3. 创建一个新的分支点到它(
    git checkout <new branch>
    )
  4. 将更改推送到子模块远程存储库(
    git push <your remote> <new branch>
    )
  5. 尽一切努力将该分支合并到主分支上(例如,如果您使用 GitHub,请打开 PR 要求将新分支合并到子模块存储库的主分支上)
  6. 在子模块的主分支上接受并合并更改后,运行
    git fetch
    下载最新的提交和分支
  7. git checkout
    你的子模块到主分支
  8. 现在,回到父仓库,假设您位于 feature1 分支:
    git add feature_submodule
    ,所以现在它将指向最新的更改,然后
    git commit

请注意,我假设 feature_submodule 指向父存储库的 master 的提交已合并到子模块的主分支上。

© www.soinside.com 2019 - 2024. All rights reserved.