tixture55’s diary

主にプログラミング関係の日記です。

git rebaseに再入門

面接で突っ込まれた際に、よく理解出来てないことが判明したのであらためて再学習です。

調べてみると、今まで思っていたrebaseと実際のrebaseの挙動はかなり違っていて再入門できてよかったと思っています。

 

git rebaseとは

masterブランチとtopic-branchブランチがあって、topic-branchで開発した内容をmasterに取り込みたいとします。そのとき、まずやるのはコミット。topic-branch側でコミットして、そのコミットをmasterの頭につけたいので、次のようにコマンドを叩きます。

git rebase master

これで下図のような状態になります。

http://www-creators.com/wp-content/uploads/2017/06/Screen-Shot-2017-06-27-at-0.17.01.png

 

この図の状態が理解できてませんでした。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コミットも作られました。図で示すと、下図のようになります。おしまい。

http://www-creators.com/wp-content/uploads/2017/06/Screen-Shot-2017-06-27-at-0.14.59.png