【Git】リモートブランチをチェックアウトしたいときは「git fetch origin <ブランチ名>」と「git checkout <ブランチ名>」を実行すれば良い

2020.09.18

こんにちは、CX事業本部の若槻です。

今回は、Gitでのリモートブランチの操作で個人的にやらかしがちなことを備忘録として残させて頂きます。

どんなこと?

「他のメンバーがリモートにpushしたブランチをローカルで参照したり動かしたりしたい!」となり、git checkout -b <ブランチ名> origin/<ブランチ名>コマンドによりリモートからブランチをチェックアウトしようとしたら、

% git checkout -b myBranch origin/myBranch
fatal: 'origin/myBranch' is not a commit and a branch 'myBranch' cannot be created from it

というエラーとなりコマンドが失敗してしまうことがあります。

これはcheckoutコマンドで第二引数に指定した名前(origin/<ブランチ名>)のリモート追跡ブランチが作成(フェッチ)されていないことが原因です。

リモート追跡ブランチの一覧はgit branch -rコマンドで確認可能です。確認してみると現在はdevelopブランチしか作成されていません。

% git branch -r
  remotes/origin/HEAD -> origin/develop

リモートブランチからリモート追跡ブランチを作成する場合は、git fetch origin <ブランチ名>コマンドを使用します。

% git fetch origin myBranch
From https://github.com/account/repository
 * [new branch]      myBranch -> origin/myBranch

% git branch -r
  remotes/origin/HEAD -> origin/develop
  origin/myBranch

欲しいブランチのリモート追跡ブランチを作成(フェッチ)できました。

※引数を指定せずにgit fetchと実行するとすべてのリモートブランチに対するリモート追跡ブランチを一括で作成および更新(フェッチ)することができます。

こうして作成されたリモート追跡ブランチからはgit checkout <ブランチ名>コマンドによりローカルブランチを作成およびチェックアウトすることができます。

% git checkout myBranch
Branch 'myBranch' set up to track remote branch 'myBranch' from 'origin'.
Switched to a new branch 'myBranch'

リモートブランチからローカルにブランチをチェックアウトすることができました。

おわりに

タイトルの通り、リモートブランチをチェックアウトしたいときは次のコマンドを使えば良いよ!というエントリーでした。

% git fetch origin <ブランチ名>
% git checkout <ブランチ名>

ついついローカルブランチからのチェックアウトと同じ要領でgit checkout -b <ブランチ名> origin/<ブランチ名>コマンドを使ってしまいがちなので気を付けたいです。

参考

以上