よく忘れるのでメモ。
やりたいこと
- ローカルでmaster以外のリモートブランチにチェックアウトする
ローカルのブランチ一覧
$ git branch
* master
リモートのブランチ一覧
$ git branch -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/HEAD
がorigin/master
を指しているとき、
$ git checkout -b NEW-BRANCH-NAME origin
は、
$ git checkout -b NEW-BRANCH-NAME origin/master
と同じ意味になる。