Git
GitHub

リモートブランチにチェックアウト

よく忘れるのでメモ。

やりたいこと

  • ローカルでmaster以外のリモートブランチにチェックアウトする

ローカルのブランチ一覧

$ git branch
* master

リモートのブランチ一覧

$ git remote -r
origin/HEAD -> origin/master
origin/add-whitespace-mode
origin/master

このように、リモートブランチはローカルだと

$ リポジトリURL(origin)/ブランチ名

という名前で表される。一方、git pull

$ git pull origin master

のように、第一引数にorigin (リポジトリURL)を取るので第二引数にorigin/と書かなくてもリモートブランチを表す。ここが紛らわしい。

ちなみに、origin/HEAD -> origin/masterはリモートリポジトリのデフォルト(origin/HEAD)がorigin/masterであることを表している。これが設定されていると、リモートリポジトリのレポジトリ名だけ指定したときに、そのデフォルトブランチが指定されたものとして振る舞う(後述)。リモートレポジトリのHEADは、

$ git remote set-head origin master(HEADブランチ)

で指定できる。

ローカルのリモートブランチの情報を最新化

$ git fetch

ローカルでリモートブランチにチェックアウト

$ git checkout -b NEW-BRANCH-NAME origin/REMOTE-BRANCH-NAME

第一引数が新しくローカルに作るブランチの名前で、第二引数はリモートブランチ名。問題なければNEW-BRANCH-NAMEはREMOTE-BRANCH-NAMEとあわせたほうが良さそう。 例えば、

$ git checkout -b add-whitespace-mode origin/add-whitespace-mode

のように。-bは作ったブランチに移動するためのオプション。

また、origin/HEADorigin/masterを指しているとき、

$ git checkout -b NEW-BRANCH-NAME origin

は、

$ git checkout -b NEW-BRANCH-NAME origin/master

と同じ意味になる。