gitのブランチの種類について

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で作業をしているとき