新しいフォルダー

気になったことや勉強したことについて書いていきます

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

****************

参考までに。