maeshimaの日記

メモ書きです

fast-forwardマージって何?

git-svnでリモートブランチを merge するときに、普通に master ブランチ上で

git merge hoge

としてしまうと、master ブランチが hoge ブランチのリモートブランチを向いてしまう。git-svnでリモートブランチをmergeするときは–no-ffをつけるべし - Webtech Walkerに書かれているように --no-ff をつけると回避できるけど、そもそも fast-forward が何なのか分からない。ので調べた。

高速前進(Fast-forward)マージ

上記で説明してこなかった特別なケースがあります。通常マージコミットにおけるマージ結果は2つの親を持ち、各親はマージした2つの開発ラインのそれぞれを指し示しています。

そのため、現在のブランチが他方の子孫である場合には ― つまり全てのコミットが既に他方のコミットに含まれている場合には ― git は "fast forward" を行います;現在のブランチの先頭はマージされるブランチの先頭の位置に進められ、新しいコミットは作成されません。

Git ユーザマニュアル (バージョン 1.5.3 以降用)

↑を見る限り、fast-forwardマージとは、例えば A ブランチのコミットを全て含む B ブランチがあるときに、 A ブランチ上で

git merge B

のようにすると、「コミットを merge する処理」は行われずに、単純に 「A ブランチの先頭を Bブランチの先頭にする」というような処理が行われる。これがfast-forwardマージ。

で、この際にgit-svnのリモートブランチも切り替わってしまうってことかな。