職場でこういう話をしていたのですが、誰も知らなかったので書いてみます。

タイトルのがどういうものかというと、下記のように複数のブランチ(issue/1~3)があったとします。

通常、この複数のブランチをmasterにnon fast forwardでマージすると3回マージする必要がでてくるので下記のようになると思います。

ですが、この3回のマージを1度で行う方法があります。それがoctopusマージです。ドキュメントはMERGE STRATEGIESocutopusのところに書いてます。

コマンド


mergeコマンドに--strategy=octopusを指定して、続けて一度にマージしたいブランチをスペース区切りで入力します。

1
git merge --no-ff --strategy=octopus <branch> <branch> ...

先の例のようにブランチ(issue/1~3)をマージする場合は下記のようになります。

1
git merge --no-ff --strategy=octopus issue/1 issue/2 issue/3

Fast-forwarding to: issue/1
Trying simple merge with issue/2
Trying simple merge with issue/3
Merge made by the 'octopus' strategy.
 README.md   | 0
 feature.txt | 0
 test.txt    | 1 +
 test1.txt   | 0
 4 files changed, 1 insertion(+)

実行後のコミットログは下記のようになります。

ちなみに、たしか競合が発生する場合は使えなかったと思います。

使いどころ


う~ん、正直コミットログがスッキリする…くらいしか思いつかないんですよね。fast fowardしたくないけど、マージのコミットは減らしたいとか…。

プルリクでできるの?


できません。