git branch

ブランチにする新しいレポジトリの作成

 git clone file:///$HOME/tmp/git $HOME/tmp/git.branch1
 cd $HOME/tmp/git.branch1

ここでは、$HOME/tmp/gitに元のレポジトリがあるとして、$HOME/tmp/git.branch1にブランチのレポジトリを作る事にする。 ブランチ名はbranch1とする。

ブランチの作成

 git branch branch1

ブランチの変更

 git checkout branch1

ブランチ作成と共にブランチの変更

 git checkout -b branch1

ブランチの確認

 git branch
 * branch1
   master

ブランチの削除

  git branch --delete branch1

マスターでブランチの修正をマージ

1. リポジトリをブランチへ変更

 git branch branch1

2. ブランチでコミット

何かしらファイルを修正したとして、

 git commit -a -m 'modified'

コミットする。

3. レポジトリをマスターへ戻す

 git checkout master

マスターに戻ったので、上のブランチでの修正は消えている。

4. mergeコマンドでブランチの修正をマージ

 git merge branch1

マスターにブランチの修正が反映される。

rebaseコマンドでブランチの修正をマージ

マスターとブランチでそれぞれ修正コミットを重ねて、以下のような状態にあるとする。

 *       1beeeb2 NA      2012-02-20 update 1.txt #2  (HEAD, master)
 *       e624f10 NA      2012-02-20 update 1.txt #1
 | *     89f9845 NA      2012-02-20 update 1.txt #b  (branch1)
 | *     5d03b99 NA      2012-02-20 update 1.txt #a
 |/
 *       e57f326 NA      2012-02-20 update 1.txt
 *       fd98d1b NA      2012-02-20 add 1.txt

ここで、ブランチに移り、リベースを実行する。

 git checkout branch1
 git rebase master

すると、 以下のような状態になる。

 *       bd0fd6a NA      2012-02-20 update 1.txt #b  (HEAD, branch1)
 *       9814001 NA      2012-02-20 update 1.txt #a
 *       1beeeb2 NA      2012-02-20 update 1.txt #2  (master)
 *       e624f10 NA      2012-02-20 update 1.txt #1
 *       e57f326 NA      2012-02-20 update 1.txt
 *       fd98d1b NA      2012-02-20 add 1.txt

マスターとブランチの分岐前の時点にいったん戻り、各修正コミットについての差分を作られる。そして、まず、マスターでの修正コミット(#1や#2)がパッチ適用された上で、ブランチでの修正コミット(#aや#b)がパッチ適用される。これでブランチはマスターの修正を取り込んだ事になる。

この時点でマスターはブランチの修正を反映してないので、マスターにブランチの修正をマージするには、以下のようにマージコマンドを実行する。

 git checkout master
 git merge branch1

参考

http://progit.org/book/ja/ch3-6.html


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