【发布时间】:2017-10-12 08:03:07
【问题描述】:
我有三个分支,master、feature 和 integration。 integration 表示部署到特定开发服务器的软件配置。特征分支先合并到integration分支,在对应的服务器上测试,再合并到master。
\ \
o----------------o----------o (master)
\ \
\ o----o-------o--o---o----o (integration)
\ / / / /
o-----o-------o--o---o----o--o (feature)
我的目标是将我的integration 分支更新为与master 相同,然后将我的feature 分支合并到其中,这样integration 分支就是master 分支加上我的@ 中的更改987654333@分行。
为此,首先将我的integration 分支与strategy=ours 合并到master 中,然后我将integration 分支快进到与master 分支相同。
\ \
o----------------o----------o--------X (master, integration)
\ \ /
\ o----o-------o--o---o----o
\ / / / /
o-----o-------o--o---o----o--o (feature)
然后我的计划是将feature 分支合并到新更新的integration 分支中。
\ \
o----------------o----------o--------X- (master)
\ \ / \
\ o----o-------o--o---o----o Y (integration)
\ / / / / /
o-----o---o---o--o---o----o---o (feature)
但是,当我这样做时,我更新的 integration 分支与集成分支上的先前提交相同,例如X 和 Y 是相同的,而不是 master 分支加上我在功能分支中的更改的总和。
那么,谁能推荐一种方法让我按照我想要的方式配置分支?
【问题讨论】:
-
为什么不直接将master合并到feature中呢?
-
从哲学上讲,因为我想将 Integration 分支所代表的服务器重新设置为与 master 相同的基线。实际上,因为我已经处于显示的第二个配置中,所以将主控或集成到功能中是相同的操作。如果我将功能重置为它的分支上的倒数第二个提交,那么只需快进即可合并。如果我从该分支上的最后一次提交提交,那么我只会得到最后两次提交之间的增量——这与最后一次提交是“git commit --allow-empty”提交无关。并且“X”提交已被推送,所以我无法重置它。
-
我仍然对你的历史是什么样子以及你想做什么感到有点困惑。如果将
integration合并到master中,则只有master应该继续前进,integration不受影响。 -
在显示的前两个示例之间,我将
integration合并到master中,正如您所说,这将master向前移动。该合并使用了ours策略,因此新提交 X 与之前对master的提交相同。然后我将master合并到integration中,后者将integration快速转发到与master相同的提交X。这是第二张图。现在我想将master合并到我的feature分支中,以便将所有其他进入master的工作合并到我的分支中。但是 git 将合并视为快进,因此我丢失了对integration分支的更改。 -
在 中,首先将我的功能分支合并到 master 与 strategy=ours,然后我将功能分支快进到与 master 分支相同。 我认为根据图表,您的意思是“将
integration合并为master”和“快进integration”。 (而且好像是你在cmets里说的。)