- 追加された行はこの色です。
- 削除された行はこの色です。
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