我有一个master
分支和一个develop
分支,我的master
分支是在生产环境中运行的代码,develop
分支是在开发环境中运行的代码,几个特性分支已经合并到develop
中,现在我正在尝试将我的develop
分支合并到master
中,下面是我当前的过程:
- 我进入Github的公关页面:https://github.com/my_org/my_repo/pulls
- 我单击“新建拉入请求
- 我将
develop
分支设置为合并到master
分支中。
但是当我查看PR时,它显示了很多已经存在于master
中的旧提交。有时候我也不得不处理一些没有意义的合并冲突(比如版本号增加了一,但由于某种原因我遇到了合并冲突)。在我合并之后,一切看起来都很好,但这让我觉得我做得不对。正确的方法是什么?
1条答案
按热度按时间umuewwlo1#
我敢打赌,当你把东西合并到
master
中时,你并没有创建真正的合并。让我解释一下。假设你有这些分支:假设我们将
develop
合并(真正的合并)为master
:现在假设在
develop
中完成了更多的工作:如果你让git把
develop
合并到master
中,git需要(粗略地)寻找它们的最新共同祖先....两个分支中出现的最新提交是什么?third commit in develop
,对吗?因此,git在合并时需要考虑的就是这棵树:但是如果你在合并的时候做了 * squashes * 会发生什么呢?让我们看看如果你做了squashes,* first * merge的结果:
第一次合并和真正的合并之间的树 * 几乎 * 是相同的...... * 但是 * 您可以看到,与第一次合并不同的是,没有关系(假设)合并提交和源分支(
develop
)...而这是一个交易破坏者,因为,即使develop
分支 * 不 * 移动,如果你试图再次合并,你能看到最新的共同祖先是什么吗?2这就是为什么你仍然看到一些提交被合并到新的PR中。底线:当合并到
master
的东西,* 不要挤压 *,除非你知道你在做什么。经验法则是,如果你正在合并长时间运行的分支,你 * 不要 * 压缩。一个在你合并的那一刻即将死亡的特征分支可以被压缩合并。