`Rebase and merge` 合并策略在 Bitbucket Server 上有什么作用?

What does the `Rebase and merge` merge strategy do on Bitbucket Server?

我正在探索 Bitbucket Server 上可能的合并策略,一个策略引起了我的注意:"Rebase and merge" rebase + merge --no-ff

据我所知,大多数关于合并策略的争论都围绕着变基 合并。这个合并策略好像是rebase and合并。这个对吗?与仅变基或仅合并相比,这会带来什么优势?

"rebase and merge" 策略通常就是人们所说的 "rebase"。它也只是表明接下来会发生什么。当您使用 --no-ff 时,它会进行合并提交。没有它,你会得到一个快进,所以两个引用都会指向同一个提交,它隐藏了你已经分支的事实。

合并 BA:

A  *---*              A  *---*---*
    \       merge ->      \     /
B    *---*            B    *---*

B 变基到 A:

A  *---*              A  *---*
    \      rebase ->          \
B    *---*            B        *---*

变基并合并 (--no-ff) BA:

A  *---*              A  *---*                  A  *---*-------*
    \      rebase ->          \       merge ->          \     /
B    *---*            B        *---*   --no-ff  B        *---*

变基并合并 (--ff) BA:

A  *---*              A  *---*                  A,B  *---*---*---*
    \      rebase ->          \       merge ->
B    *---*            B        *---*   --ff

Bitbucket Server 文档针对 Rebase、合并(rebase + merge --no-ff)和 Rebase、快进(rebase + merge --ff-only)合并策略说明了这一点。

"The PR branch is not modified by this operation"

根据此声明,在您的示例中,分支 B 中提交的 commitSHA 将保持不变。当在分支 A 中应用时,Bitbucket 将为相同的提交分配新的 commitSHA。