我刚刚注意到在Azure DevOps中,有一个名为semi-linear merge
的选项。我想知道它是做什么的?它是否介于合并策略和重基策略之间(从名称半线性)?如果是这样的话,有哪些利弊?
编辑:从Microsoft Devblog我相信这个选项包括2点:
1.从master/dev分支重定feature分支的基
1.然后在master/dev分支中合并feature分支
但这不是合并策略吗?
我刚刚注意到在Azure DevOps中,有一个名为semi-linear merge
的选项。我想知道它是做什么的?它是否介于合并策略和重基策略之间(从名称半线性)?如果是这样的话,有哪些利弊?
编辑:从Microsoft Devblog我相信这个选项包括2点:
1.从master/dev分支重定feature分支的基
1.然后在master/dev分支中合并feature分支
但这不是合并策略吗?
2条答案
按热度按时间mrwjdhj31#
半线性合并
这种策略是最奇特的--它混合了变基和合并。首先,pull请求中的提交在master分支的顶部重新定基。然后,这些重基拉请求被合并到主分支。它模拟在pull request分支上运行
git rebase master
,然后在master分支上运行git merge pr --no-ff
。有些人认为这是两全其美:单个的提交被保留,这样你就可以看到工作是如何发展的,但不是仅仅被重新定基,而是显示一个“合并气泡”,这样你就可以立即看到每个单独的拉取请求中的工作。
来源:Pull Requests with Rebase
u2nhd7ah2#
半线性合并只是在完成合并之前添加一个变基以使分支保持最新。如果要将
my-branch
PR到target-branch
,则与以下命令相同:一些优点和缺点如下:
优点:
1.变基首先使每个合并更清晰,更容易在视觉上跟踪。它还将所有更改放入提交本身,而不必在合并提交中跟踪不希望的副作用,这通常很困难。注意,仍然建议开发人员在创建PR之前进行一次rebase,这样他们就可以见证当时发生的任何更改,并针对最新版本运行单元测试,以确保没有任何异常发生。(这类似于在创建PR之前测试合并提交并运行测试,只是为了确保常规合并仍然按预期工作。)
缺点:
git branch -D my-branch
(而不是小写的-d),因为提交ID可能已经更改。这几乎不是一个不便,除非你一般不删除您的本地分支机构的权利;如果您等待,您将需要确认您确实可以删除它。**旁注:**其他工具也提供此功能:
--no-ff
合并。**附加说明:**我在任何地方都找不到此文档,但我已经测试并确认,在Azure DevOps中完成PR时,如果您选择“Rebase and fast-forward”或“Semi-linear merge”,则PR源分支将在PR完成之前重写。通常情况下,你会在合并后勾选框来删除你的源分支,并且不会关心这个,但是如果你选择不选中该设置,那么重要的是要意识到你的远程分支将在你的下一次本地提取时显示为“(强制更新)”,如果需要变基的话。这可能是一个优点或缺点,具体取决于您的用例;大多数时候我倾向于更喜欢这样。
关于其他工具,GitLab使用此策略强制 * 您 * 通过单击按钮更新分支,而Bitbucket特别不 * 修改PR分支,其等效的“Rebase,合并”策略。