2つのブランチ間でmergeした場合の状態遷移について整理


merge commitやらFastFowardやらマージについてある程度理解できてきたので、図を混ぜつつ自分なりに整理してみようと思います。

検証

初期登録

テストリポジトリを作成して、ファイルの初期登録を行います。

$ mkdir test;cd $_
$ git init
$ echo 'aaa' > a.txt;echo 'bbb' > b.txt
$ git add .
$ git commit -m 'init'

masterのファイル内容

a.txt
aaa
b.txt
bbb

git log

$ git log master --oneline
c06bbc0 init

devブランチを作成してdevにcommit

$ git checkout -b dev
$ echo 'devブランチで修正' >> b.txt
$ git add .
$ git commit -m 'update b.txt'

devのファイル内容

a.txt
aaa
b.txt
bbb
devブランチで修正

git log

$ git log master --oneline
c06bbc0 init

$ git log dev --oneline
531732d update b.txt
c06bbc0 init

masterにcommit

$ git checkout master
$ echo 'masterブランチで修正' >> a.txt
$ git add .
$ git commit -m 'update a.txt'

masterのファイル内容

a.txt
aaa
masterブランチで修正
b.txt
bbb

git log

$ git log master --oneline
17f9c80 update a.txt
c06bbc0 init

$ git log dev --oneline
531732d update b.txt
c06bbc0 init

devmasterの内容をmerge

$ git checkout dev
$ git merge master
### Fast-Forwad出来ないので適当なコミットコメント設定
$ git add .
$ git commit -m 'update a.txt'

devのファイル内容

a.txt
aaa
masterブランチで修正
b.txt
bbb
devブランチで修正

git log

$ git log master --oneline
17f9c80 update a.txt
c06bbc0 init

$ git log dev --oneline
b2a61a2 Merge branch 'master' into dev
17f9c80 update a.txt
531732d update b.txt
c06bbc0 init

devにcommit

$ echo 'ccc' >> c.txt
$ git add .
$ git commit -m 'add c.txt'

devのファイル内容

a.txt
aaa
masterブランチで修正
b.txt
bbb
devブランチで修正
c.txt
ccc

git log

$ git log master --oneline
17f9c80 update a.txt
c06bbc0 init

$ git log dev --oneline
576d44b add c.txt
b2a61a2 Merge branch 'master' into dev
17f9c80 update a.txt
531732d update b.txt
c06bbc0 init

masterdevの内容をmerge

$ git checkout master
$ git merge dev

masterのファイル内容

a.txt
aaa
masterブランチで修正
b.txt
bbb
devブランチで修正
c.txt
ccc

git log

$ git log master --oneline
576d44b add c.txt
b2a61a2 Merge branch 'master' into dev
17f9c80 update a.txt
531732d update b.txt
c06bbc0 init

$ git log dev --oneline
576d44b add c.txt
b2a61a2 Merge branch 'master' into dev
17f9c80 update a.txt
531732d update b.txt
c06bbc0 init

以上。