Git,将开发从一个分支转移到另一个分支

Git, moving development from one branch to another

我有一个 Git 存储库,其中包含一个带有两个分支的 Java 库:mainjdk8

jdk8分支是主开发分支,所有的改动合并到main,而main 分支是模块化的,基于 jdk11,具有模块-info.java 文件和 Gradle 构建文件中的更改、不同的构建插件和依赖项的模块化版本(如果可用)。源代码本身在两个分支之间几乎相同。

我想做的是停止在 jdk8 分支上开发并开始使用 main 作为主要开发分支,将更改合并到 jdk8 分支,从那里开始。

一些谷歌搜索让我找到了这些:

Git - Ignore files during merge

由此我想出了这个策略:

git结帐jdk8

git merge -s ours main

我已经测试过了,它看起来像预期的那样工作,也就是说,允许我在 main 上开始开发并将更改合并到 jdk8 分支,排除合并期间不属于那里的任何修改文件(例如,也许我可以使用 git 属性自动排除模块-info.java 文件)。

从表面上看,这似乎很容易处理,但由于我对 Git 的理解很初级,我想知道这是否会导致一些问题,是否有更好的 ( “正确”甚至?)这样做的方式?

这似乎是一个危险的流程。即使您成功进行了空合并,允许您将 main 中的未来更改合并回 jdk8,只要您有任何新的 jdk>8 更改,您就会遇到冲突必须手动解决。例如,您的模块 info.java 或 gradle 脚本中的任何更改都会让您头疼...我建议您有 2 个选项:

(选项 1)您可以只为 jdk8 分支创建共同的功能并将它们轻松合并到主分支和 jdk>8 开发人员直接合并到主分支

(选项 2)您可以使用 main 中的功能分支进行开发,然后合并回主分支,然后将它们挑选到 jdk8.

(选项 3)如果你想保留功能分支的历史:你可以(一旦分支合并到主分支)使用 rebase --onto 只将有趣的提交段放入 jdk8

现在 jdk8 分支看起来更像是一个维护分支,我认为(选项 2)是首选