git rebase の挙動
あまり使うことはないとおもうが
一応触ってみた感じの挙動をまとめておく
○リポジトリ(master)を適当に作り以下のファイルを作成〜コミットした
sample.txt
****************
GIT
REBASE_TEST
XXX
****************
【ツリー】
* 07ad098 (HEAD, master) 2015-02-21 rebase_user@com 初回commit
○Developブランチ作成
【ツリー】
* 07ad098 (HEAD, master, develop) 2015-02-21 rebase_user@com 初回commit
○masterとdevelopのファイルを以下のように変更(それぞれ2回ずつコミット)
sample.txt(master)
****************
MASTER_GIT
REBASE_TEST
XXX
****************
sample.txt(develop)
****************
GIT
REBASE_TEST
DEVELOP_XXX
**************** ※緑文字はその時追加した文字
* 4c4a08f (develop) 2015-02-21 rebase_user@com LOP_
* bfdaaeb 2015-02-21 rebase_user@com DEVE
| * b00c3f7 (HEAD, master) 2015-02-21 rebase_user@com TER
| * 9927202 2015-02-21 rebase_user@com MAS
|/
* 07ad098 2015-02-21 rebase_user@com 初回commit
****************
○このあとdevelopリポジトリに対して「rebase master」コマンドを入力
****************
* 74ccca4 (HEAD, develop) 2015-02-21 rebase_user@com LOP_
* 9c68f19 2015-02-21 rebase_user@com DEVE
* b00c3f7 (master) 2015-02-21 rebase_user@com TER
* 9927202 2015-02-21 rebase_user@com MAS
* 07ad098 2015-02-21 rebase_user@com 初回commit
****************
綺麗に直線になってる
○肝心のファイル内容
sample.txt(develop)
****************
MASTER_GIT
REBASE_TEST
DEVELOP_XXX
****************
masterの変更分が取り込まれてる。
○master側のファイルを確認(git checkout master)
sample.txt(master)
****************
MASTER_GIT
REBASE_TEST
XXX
****************
変化なし(当たり前だけど)
○masterがdevelopの変更点を取り込む(git merge develop)
****************
* 74ccca4 (HEAD, master, develop) 2015-02-21 rebase_user@com LOP_
* 9c68f19 2015-02-21 rebase_user@com DEVE
* b00c3f7 2015-02-21 rebase_user@com TER
* 9927202 2015-02-21 rebase_user@com MAS
* 07ad098 2015-02-21 rebase_user@com 初回commit
****************
これでdevelop側の更新を取り込みつつツリーが綺麗になりました。
これだけみると「マージの跡が残らないマージ」という感じ。
無理矢理使うとしたらリベース→マージ→作業ブランチ削除が妥当かな?
他に使うとしたら公式(Git - リベース)の図の3−31のようなケースになると思うが
そもそも3−31のような運用はしない方が良いと思う。
※余談
rebase直後はツリー上では一直線にみえているが、ここでmasterのファイルを更新するとツリーは以下のようになる。
****************
* e7e87dc (HEAD, master) 2015-02-21 rebase_user@com AAA
| * 74ccca4 (develop) 2015-02-21 rebase_user@com LOP_
| * 9c68f19 2015-02-21 rebase_user@com DEVE
|/
* b00c3f7 2015-02-21 rebase_user@com TER
* 9927202 2015-02-21 rebase_user@com MAS
* 07ad098 2015-02-21 rebase_user@com 初回commit
****************
参考までに。