http://kray.jp/blog/git-why-explanation/ http://www.backlog.jp/git-guide/stepup/stepup2_1.html
$ mkdir tutorial && cd $_ $ git init Initialized empty Git repository in /Users/masatomix/git/tutorial/.git/ $ echo "master added" >> file1.txt $ cat file1.txt master added $ git add file1.txt $ git commit -m "master commit" [master (root-commit) 25c2961] master commit
1 file changed, 1 insertion(+) create mode 100644 file1.txt
$ echo "2 master added" >> file1.txt $ cat file1.txt master added 2 master addedgit $ git add file1.txt $ git commit -m "2 master commit" [master ad0dac1] 2 master commit
1 file changed, 1 insertion(+)
addしてcommitの繰り返しです。コミットまでできました。
ブランチを作成します $ git checkout -b dev ←作成と移動。作成だけなら git branch dev でいい Switched to a new branch 'dev' $ git branch
master
ローカルのワーキングツリーがdevになりました。この時点で、masterとdev それぞれはおなじリビジョンにいることになります。
01.png
devに存在するファイルを修正して、コミットします。
$ echo "dev modified" >> file1.txt $ git add file1.txt $ git commit -m "dev commit" [dev 3f7af4f] dev commit
1 file changed, 1 insertion(+)
$
02.png
画面イメージを見て分かるとおり、devだけひとつリビジョンが進んでいますね。
さて、devで修正した内容をmasterにマージします。マージとはようするに、ローカルのワーキングツリー上のブランチに、他のブランチの修正を反映させることです。 修正反映させたいブランチへ移動して、他のブランチを指定して下記コマンドを実行します。
$ git checkout master Switched to branch 'master' $ git merge dev Updating ad0dac1..3f7af4f Fast-forward
file1.txt | 1 + 1 file changed, 1 insertion(+)
$ git branch
dev
今回は masterブランチにdevブランチをマージしました。ただmasterはなにもコミットがされていなかったので、ただ単に、masterブランチのリビジョンがdevに進んだだけのようですね。(Fast-forwardという) 03.png
masterブランチからdevブランチを作成後、masterが別のブランチをマージしたことで先に進んで場合を考えます。この場合はdevブランチの修正はをmasterにマージする際、単純なFast-forwardにすることはできないはずですね。
$ git checkout -b dev2 Switched to a new branch 'dev2' $ echo "dev2 added " >> file2.txt $ git add file2.txt $ git commit -m "dev2 commit" [dev2 134e253] dev2 commit
1 file changed, 1 insertion(+) create mode 100644 file2.txt
$ git checkout master Switched to branch 'master' $ git merge dev2 Updating 3f7af4f..134e253 Fast-forward
file2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 file2.txt
masterを少し進めました。
04.png
さあ、dev2でコミットしたファイルをマージしたmasterに対して、devの修正を反映してみます。
$ echo "dev added " >> file1.txt && git add file1.txt && git commit -m "2 dev commit" [dev 3f7a1ef] 2 dev commit
1 file changed, 1 insertion(+)
05.png
いきます
$ git checkout master Switched to branch 'master' $ git merge dev Merge made by the 'recursive' strategy.
file1.txt | 1 + 1 file changed, 1 insertion(+)
06.png
新しいコミットが実行され、Fast-forwardでないやり方で、ファイルがマージされました。
最後にdevをmasterまで進めて、完了です。
$ git checkout dev $ git merge master Updating 3f7a1ef..56f88d1 Fast-forward
file2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 file2.txt
masterとdevはおなじ状態になりました。
07.png