http://qiita.com/uasi/items/69368c17c79e99aaddbf
gitには、いくつかのブランチの種類がある。
この種類というのは種類aでなければ必ず種類bだ、という分け方をした種類ではない。(例えば、鶴は鳥類という種類であり、同時に食材という種類でもあるように)
ローカルブランチ/リモートブランチ
ローカルブランチは、いま見ているレポジトリ内に存在するブランチのこと。
リモートブランチは、いま見ているレポジトリではないレポジトリ(リモートレポジトリ)に存在するブランチのこと。
リモート追跡ブランチ remote-tracking branch
リモート追跡ブランチは、リモートレポジトリに存在するブランチの内容をコピーするブランチである。
「ブランチAがブランチBの内容を取得する」という文脈で「A」側のブランチを指す言葉。
例えば「remotes/origin/master」がリモート追跡ブランチ。
cloneしたときに自動的に作られる。また、remoteコマンドで追加することができる。
リモート追跡ブランチは、fetchコマンドで更新されるブランチとして利用される。(pullコマンドはfetch+mergeなので、当然pullコマンドでも利用される)
上流ブランチ upstream branch
上流ブランチは、あるブランチに対する情報取得元のブランチである。(ブランチ名指定無しのmergeを実行したとき、既定でマージされるブランチ)
「ブランチAがブランチBの内容を取得する」という文脈で「B」側のブランチを指す言葉。
例えば「master」に対する上流ブランチは「remotes/origin/master」。
cloneしたときに自動的に設定される(情報取得「元」ブランチなので、概念として自動で作成されることはありえない)。また、branch --set-upstream-to コマンドで設定できる。
上流ブランチは、引数なしmergeコマンドを実行したときマージされるブランチとして利用される。(pullコマンドはfetch+mergeなので、当然pullコマンドでも利用される)
図にするとこんな感じ。下図だと、remotes/origin/master は、ローカルブランチであり、同時にリモート追跡ブランチであり、同時にmasterに対する上流ブランチである。
| レポジトリA(レポジトリBをcloseして作成) | | レポジトリB | |-----------------------------------------------------| |-------------------------| | 《master》 → 《remotes/origin/master》 →→→→→→→→→→→→ 《master》 | | | | | | 【リモート追跡ブランチ】 | | | | リモートブランチ内容を | | | | 『取得する側』のブランチ | | | | | | | | 【上流ブランチ】 | | | | いずれかのブランチに内容を | | | | 『取得される側』のブランチ | | | | | | | | 【ローカルブランチ】 | | 【リモートブランチ】 | ※レポジトリAで作業をしているとき