如何在GIT中合并子模块更改和主模块?

时间:2014-05-05 00:22:33

标签: git git-submodules git-merge

我是一名C#开发人员并试图找出Git。这是一个与我在集中式VCS中使用的环境完全不同的环境(我对TFS非常熟悉)。我在Git上观看了一些优秀的Pluralsight视频,并通过了教程并对基本的Git功能充满信心,但我认为我遗漏了一些关于合并/变基的基本信息。

我已经分叉和修改了mediawiki以及它的一些扩展(也将它们分叉并重新命名我的.gitmodules以指向我的分叉版本)。我目前已经部署到生产的1.22.5(对应于分支 REL1_22 ),并且我已经完成了所有更改。我还提交了我的子模块更改。这些更改会提示主repo中的另一个更改,以重新指定子模块引用以指向新提交。

这是逃避我的部分。假设我想在master中重现我的更改。在TFS中,每个分支都在不同的目录中。合并时,所有代码都复制到另一个目录中,处理冲突并签入。使用Git,我用git checkout master切换分支,让我在同一目录中(虽然我知道Git恢复了快照,目标分支指向,根据需要添加/删除文件和文件夹)。此时,如何合并子模块+ main的更改?我是否使用git merge <SHA-1>合并子模块中的特定提交,然后在主项目中再次git merge(使用更新的子模块参考SHA-1)?是否有更简洁的方法将所有内容包装在一个分支中,并将该分支合并到主(和其他发布分支)?也许git rebase是我正在寻找的,重播我在另一个分支上的所有更改?

1 个答案:

答案 0 :(得分:2)

  

此时,如何合并子模块+ main的更改?

通常在主仓库(包括子模块的仓库)中合并您的分支 这将更新代表子模块更新的SHA1的gitlink (special entry mode 160000):当您在主仓库中合并时,您不会合并子模块中的文件,只需更新那些gitlink SHA1。

然后,在合并之后,运行git子模块更新,以更新这些子模块的内容。

合并父仓库中的分支并不意味着你必须在子模块中合并任何东西:子模块用于将嵌套的git仓库的开发与其父仓库分离,同时保持前者的精确引用。后者(gitlink)。