http://kray.jp/blog/git-why-explanation/ http://www.backlog.jp/git-guide/stepup/stepup2_1.html ** Gitを始める [#qac54eb8] $ 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の繰り返しです。コミットまでできました。 ** ブランチを作成する [#s0954705] ブランチを作成します $ git checkout -b dev ←作成と移動。作成だけなら git branch dev でいい Switched to a new branch 'dev' $ git branch * dev [#h881c414] 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だけひとつリビジョンが進んでいますね。 ** ブランチのマージ [#c7877d94] さて、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 [#fbf5598a] 今回は masterブランチにdevブランチをマージしました。ただmasterはなにもコミットがされていなかったので、ただ単に、masterブランチのリビジョンがdevに進んだだけのようですね。(Fast-forwardという) 03.png ** Fast-forwardでないマージ [#nc334ab4] 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