我正在开发一个带有子模块的存储库。 我有一个分支 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 如何合并子模块,希望对你有帮助:https://lucasoshiro.github.io/posts-en/2022-03-12-merge-submodule/
我无法确切地弄清楚您的子模块发生了什么,但是,如果您在本地将 master 合并到 feature1 中,并将 6c084 替换为 7b3325,则会发生以下情况之一:
如果您将您和其他开发人员引入的更改保留在 feature_submodule 上,那么您可以执行此操作(使其适应子模块的贡献工作流程):
git checkout
至 6c084git checkout <new branch>
)git push <your remote> <new branch>
)git fetch
下载最新的提交和分支git checkout
你的子模块到主分支git add feature_submodule
,所以现在它将指向最新的更改,然后 git commit
请注意,我假设 feature_submodule 指向父存储库的 master 的提交已合并到子模块的主分支上。