Git 良い考え方 リベース 

最近、以降に紹介する書籍を購入して、Gitを通じて分散バージョン管理に入門、バージョン管理に再入門しています。

ローカルでのバージョン管理の仕組みはとても軽快で、さくさく動くのがとても気持ちいい感じです。バージョン管理システムとしてもSubversionとは少し違った考え方もあり、理解できればより良い考え方といえると思います。今回は、その中で私がとても気に入ったgit rebaseの考え方を紹介したいと思います。

参考にした書籍


この書籍は、一人で管理する場合から始まり、チームでの開発の例、また自分がコミット権を持っていないオープンソースプロジェクトの参加の仕方など、かなり実践に近いかたちで書かれていて、とてもためになりました。
今回は上記の書籍によく使われている図の形を真似しています。書籍の上ではこのような図で上記に紹介したようなケースを表現してくれています。

rebaseを仕様する上で想定されるケース

さて、まずは想定されるケースについて説明します。

mergeをしてbranchをmasterに統合すると…

続いて、一般的に行われるmergeのケースを説明します。

20120312追記
この絵ではmergeではブランチのコミットが残らないと書いてありますが、正確には残ります。

$git log --oneline --graph

上記のコマンドを実行すると、ブランチとマスターのマージを含めたコミット状況がよく分かります。

rebaseでbranchをmasterに統合すると…

rebaseであれば、以下のような統合が行えます。

補足

いかかでしょうか?この考え方はよくできていると思います。もちろん、rebase時にもmerge時と同じようにコンフリクト(同一の変更箇所の衝突)が起こる可能性があり、mergeと同じように衝突箇所の検出を行うことができます。よく考えられた仕組みですね。

今後もGitをメインにしつつ、他のSCMも少しずつ学んでいけたいいなと思います。