git rebaseに再入門
面接で突っ込まれた際に、よく理解出来てないことが判明したのであらためて再学習です。
調べてみると、今まで思っていたrebaseと実際のrebaseの挙動はかなり違っていて再入門できてよかったと思っています。
git rebaseとは
masterブランチとtopic-branchブランチがあって、topic-branchで開発した内容をmasterに取り込みたいとします。そのとき、まずやるのはコミット。topic-branch側でコミットして、そのコミットをmasterの頭につけたいので、次のようにコマンドを叩きます。
git rebase master
これで下図のような状態になります。
この図の状態が理解できてませんでした。rebaseしただけだとmaster側にtopic-branchの内容はまだ取り込まれていません。なので、git mergeする必要があります。
この際、--no-ffというオプションをつけます。gitのデフォルト設定はfirst-forwardなので、mergeコミットがmaster側に作られません。これをmergeコミットを作る設定にするのが--no-ffです。
git merge --no-ff topic-branch
とすることで無事、topic-branchでの変更箇所がmasterに取り込まれ、mergeコミットも作られました。図で示すと、下図のようになります。おしまい。