* git branch [#wed6ddda]
** ブランチにする新しいレポジトリの作成 [#h3efe796]
git clone file:///$HOME/tmp/git $HOME/tmp/git.branch1
cd $HOME/tmp/git.branch1
ここでは、$HOME/tmp/gitに元のレポジトリがあるとして、$HOME/tmp/git.branch1にブランチのレポジトリを作る事にする。
ブランチ名はbranch1とする。
** ブランチの作成 [#e4dd8e7a]
git branch branch1
** ブランチの変更 [#wdd10095]
git checkout branch1
*** ブランチ作成と共にブランチの変更 [#ve33026a]
git checkout -b branch1
** ブランチの確認 [#wcc4a6ee]
git branch
* branch1
master
** ローカルブランチの削除 [#ae445d55]
git branch --delete branch1
git bramch -d branch1
** リモートブランチの削除 [#sf790dcb]
git push --delete origin branch1
git push origin :branch1
** マスターでブランチの修正をマージ [#d8ad255e]
*** 1. リポジトリをブランチへ変更 [#a3fc0abd]
git branch branch1
*** 2. ブランチでコミット [#p0243af9]
何かしらファイルを修正したとして、
git commit -a -m 'modified'
コミットする。
*** 3. レポジトリをマスターへ戻す [#cff42a38]
git checkout master
マスターに戻ったので、上のブランチでの修正は消えている。
*** 4. mergeコマンドでブランチの修正をマージ [#k417ce6d]
git merge branch1
マスターにブランチの修正が反映される。
** rebaseコマンドでブランチの修正をマージ [#fe0ec799]
マスターとブランチでそれぞれ修正コミットを重ねて、以下のような状態にあるとする。
* 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
*** 参考 [#t2b0696f]
http://progit.org/book/ja/ch3-6.html