Gitでリベースしてみる

GitHubにリポジトリを作成してみる
の続き

Gitでリベースしてみる。

現状

現状、sample.txtのファイルが1つある状態。

$ cat sample.txt
111
222
333
$ git status
# On branch master
nothing to commit (working directory clean)
$ git branch
* master

mergeの場合

ブランチ側でファイルを修正する。

$ git checkout -b test
Switched to a new branch 'test'
$ vi sample.txt
111
222
333
444
$ git commit -a -m 'ブランチ側で444を追加'
[test aa25e5c] ブランチ側で444を追加
 1 files changed, 1 insertions(+), 0 deletions(-)

マスター側でファイルを修正する。

$ git checkout master
Switched to branch 'master'
$ vi sample.txt
000
111
222
333
$ git commit -a -m 'マスター側で000を追加'
[master bb25fa8] マスター側で000を追加
 1 files changed, 1 insertions(+), 0 deletions(-)

ブランチ側にマージする。

$ git checkout test
$ git merge master
Auto-merging sample.txt
Merge made by recursive.
 sample.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

反映された。

$ cat sample.txt
000
111
222
333
444

グラフは下記のようになる。

$ git log --graph
*   commit 29188b117e1ca884649cc9d9df62f864c09937ce
|\  Merge: c643539 bbf341b
| | Author: Your Name <you@example.com>
| | Date:   Tue Mar 4 08:46:17 2014 +0900
| |
| |     Merge branch 'master' into test
| |
| * commit bbf341b4167aa9937c6cbc0e4e4c819ec89dd637
| | Author: Your Name <you@example.com>
| | Date:   Tue Mar 4 08:45:33 2014 +0900
| |
| |     マスター側で000を追加
| |
* | commit c6435393796ba162b0e2f4d70387e3bbc8488784
|/  Author: Your Name <you@example.com>
|   Date:   Tue Mar 4 08:44:58 2014 +0900
|
|       ブランチ側で444を追加
|

元に戻す

一旦元に戻して、下記の状態にする。

$ cat sample.txt
111
222
333
$ git status
# On branch master
nothing to commit (working directory clean)
$ git branch
* master

リベースしてみる

ブランチ側でファイルを修正する。

$ git checkout -b test
Switched to a new branch 'test'
$ vi sample.txt
111
222
333
444
$ git commit -a -m 'ブランチ側で444を追加'
[test 8f04162] ブランチ側で444を追加
 1 files changed, 1 insertions(+), 0 deletions(-)

マスター側でファイルを修正する。

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 3 commits.
$ vi sample.txt
000
111
222
333
$ git commit -a -m 'マスター側で000を追加'
[master 9fb9b2b] マスター側で000を追加
 1 files changed, 1 insertions(+), 0 deletions(-)

ブランチ側にリベースする。

$ git checkout test
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: ブランチ側で444を追加
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging sample.txt

反映された。

$ cat sample.txt
000
111
222
333
444

グラフは下記のようになる。

$ git log --graph
* commit c18b545a8507701b35f339f879be713a5ffa68b0
| Author: Your Name <you@example.com>
| Date:   Tue Mar 4 09:03:07 2014 +0900
|
|     ブランチ側で444を追加
|
* commit 9fb9b2b0e326fa31284dd4954606f35f79a9cc87
| Author: Your Name <you@example.com>
| Date:   Tue Mar 4 09:03:37 2014 +0900
|
|     マスター側で000を追加
|
【参考】
こわくない Git
http://www.slideshare.net/kotas/git-15276118