http://kray.jp/blog/git-why-explanation/ http://www.backlog.jp/git-guide/stepup/stepup2_1.html

Gitを始める

$ 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

dev

 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

今回は masterブランチにdevブランチをマージしました。ただmasterはなにもコミットがされていなかったので、ただ単に、masterブランチのリビジョンがdevに進んだだけのようですね。(Fast-forwardという) 03.png

Fast-forwardでないマージ

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