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


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS