チーム開発でGitを使っていると、「他のメンバーが作成したリモートブランチをローカルに持ってきて作業を始めたい」という場面に頻繁に遭遇します。慣れてしまえば何気ない操作ですが、fetch・checkout・trackingの関係を正しく理解していないと、意図しないブランチで作業してしまったり、pushやpull時にエラーが出たりすることがあります。本記事では、この一連の手順を体系的に整理してお伝えします。
Gitでリモートブランチをチェックアウトする手順(全体像)
リモートブランチをローカルに取得して作業を開始するまでの基本手順は、以下の3ステップです。
# 1. リモートの最新情報を取得
git fetch origin
# 2. リモートブランチをローカルにチェックアウト
git checkout feature/user-auth
# または(Git 2.23+)
git switch feature/user-auth
# 3. トラッキングの確認
git branch -vv| ステップ | コマンド | 役割 |
|---|---|---|
| 情報取得 | git fetch origin | リモートの最新状態をローカルにダウンロード |
| チェックアウト | git checkout <branch> | ローカルブランチを作成して切り替え |
| チェックアウト(Git 2.23+) | git switch <branch> | ブランチ操作に特化したコマンド |
| トラッキング確認 | git branch -vv | ローカルとリモートの紐づけを確認 |
以下、各ステップを詳しく解説します。
git fetchでリモートブランチの情報を取得する
Gitで他のメンバーが作成したブランチを取得する最初のステップは git fetch です。ここで重要なのは、fetchはリモートリポジトリの情報をローカルにダウンロードするだけで、作業ディレクトリには一切影響を与えないという点です。
# リモートの最新情報をすべて取得
git fetch origin
# 特定のブランチだけを取得したい場合
git fetch origin feature/user-authfetchを実行すると、ローカルには origin/feature/user-auth のようなリモート追跡ブランチが作成・更新されます。この段階ではあくまで「リモートの状態を知った」だけであり、自分の作業ブランチとしてはまだ存在していません。
筆者自身、Git を使い始めた頃は git pull との違いがよく分からず、とりあえずpullしていた時期がありました。しかしpullはfetchとmerge(またはrebase)を同時に行うコマンドです。意図しないマージが発生するリスクを避けるためにも、まずfetchで情報を取得し、内容を確認してから次のステップに進む習慣をつけることをお勧めします。
リモートブランチの一覧を確認するには、以下のコマンドが便利です。
# リモートブランチの一覧を表示
git branch -r
# ローカルとリモートの両方を表示
git branch -a同じように「fetchしたはずなのにブランチが見えない」と悩んでいる方も多いのではないでしょうか。その場合は git fetch --prune を試してみてください。リモートで削除済みのブランチ参照がローカルに残っていると、一覧が煩雑になり、目的のブランチを見つけにくくなることがあります。
git checkoutでリモートブランチをローカルに作成する
fetchでリモートブランチの情報を取得できたら、次はローカルブランチを作成して作業を開始します。
# リモートブランチと同名のローカルブランチを作成して切り替え
git checkout feature/user-auth実はこのコマンドには、Gitの便利な自動処理が組み込まれています。ローカルに feature/user-auth というブランチが存在せず、かつリモートに origin/feature/user-auth が1つだけ存在する場合、Gitは自動的にリモート追跡ブランチに基づくローカルブランチを作成してくれます。この挙動は「DWIMモード(Do What I Mean)」と呼ばれています。
ただし、複数のリモートを設定している環境では、この自動判別が正しく動作しないことがあります。そのような場合は、明示的にリモート追跡ブランチを指定しましょう。
# 明示的にリモート追跡ブランチを指定して作成
git checkout -b feature/user-auth origin/feature/user-authgit switchでリモートブランチをチェックアウトする(Git 2.23+)
Git 2.23以降で導入された git switch コマンドを使う方法もあります。checkoutはブランチの切り替えとファイルの復元という2つの異なる機能を持っており、switchはブランチ操作に特化したコマンドとして分離されました。
# switchコマンドでの同様の操作
git switch feature/user-auth
# 明示的に作成する場合
git switch -c feature/user-auth origin/feature/user-authcheckoutとswitchのどちらを使うかはチームの方針次第ですが、新しいプロジェクトではswitchを採用するケースが増えてきていると感じます。一概にどちらが優れているとは言えない部分もありますので、チーム内で統一しておくとよいでしょう。
git checkoutでリモートブランチをチェックアウトできない場合の対処法
リモートブランチのチェックアウトがうまくいかない場合、原因はいくつかのパターンに分類できます。
fetchしていない
最も多い原因です。リモートに新しいブランチが作成されていても、git fetchを実行するまでローカルには情報が反映されません。
# まずfetchを実行
git fetch origin
# ブランチが取得されたか確認
git branch -r | grep feature/user-auth同名のローカルブランチが既に存在する
ローカルに同名のブランチが存在する場合、git checkoutの自動作成は動作しません。
# ローカルブランチの存在を確認
git branch | grep feature/user-auth
# 不要であれば削除してからチェックアウト
git branch -d feature/user-auth
git checkout feature/user-auth複数のリモートに同名ブランチが存在する
複数のリモート(origin、upstream等)に同名のブランチがある場合、DWIMモードが動作しません。明示的にリモートを指定してください。
# どのリモートにブランチがあるか確認
git branch -r | grep feature/user-auth
# リモートを明示的に指定
git checkout -b feature/user-auth origin/feature/user-auth作業中の変更がコンフリクトする
未コミットの変更がチェックアウト先のブランチとコンフリクトする場合、切り替えに失敗します。
# 変更を一時退避
git stash
# チェックアウト
git checkout feature/user-auth
# 必要に応じて退避した変更を復元
git stash poptracking(upstream)の設定と確認方法
ローカルブランチとリモートブランチの紐づけを「トラッキング(upstream tracking)」と呼びます。前述のcheckoutやswitchで自動作成した場合は、トラッキングも自動で設定されます。しかし、手動でブランチを作成した場合や、トラッキングが切れてしまった場合には、明示的に設定し直す必要があります。
# 既存のローカルブランチにupstreamを設定
git branch --set-upstream-to=origin/feature/user-auth feature/user-auth
# 短縮形
git branch -u origin/feature/user-authトラッキングが正しく設定されているかどうかは、以下のコマンドで確認できます。
# 各ブランチのトラッキング情報を表示
git branch -vv出力例は次のようになります。
main a1b2c3d [origin/main] 最新のコミットメッセージ
* feature/user-auth e4f5g6h [origin/feature/user-auth] 認証機能の実装ブランチ名の横に [origin/feature/user-auth] のように表示されていれば、トラッキングが設定されています。この設定があることで、git pull や git push を引数なしで実行でき、日常の操作が格段にスムーズになります。
最初はトラッキングの概念を見落としていたのですが、これを理解してからは「pushするたびにリモートブランチ名を指定する」という手間がなくなり、作業効率が明らかに向上しました。
実務で使えるリモートブランチ取得のワークフロー
ここまでの内容を踏まえ、リモートブランチを取得してローカルで作業を開始するまでの実践的なワークフローを整理します。
# 1. リモートの最新情報を取得(不要な参照も整理)
git fetch --prune origin
# 2. 目的のリモートブランチが存在するか確認
git branch -r | grep feature/user-auth
# 3. ローカルブランチを作成して切り替え
git switch feature/user-auth
# 4. トラッキングが正しく設定されているか確認
git branch -vv
# 5. 作業を進め、コミット後にpush
git add .
git commit -m "認証ロジックの修正"
git pushこの手順を一通り身につけておけば、チーム開発においてリモートブランチとのやり取りで迷うことはほとんどなくなるはずです。
注意点として、長期間更新していないブランチで作業を再開する場合は、作業前に git pull でリモートの最新変更を取り込むことを忘れないようにしてください。コンフリクトが発生した場合も、fetchで最新状態を把握してから対処するほうが安全です。
まとめ
fetch・checkout・trackingは、Gitのブランチ運用における基本中の基本です。しかし、振り返ると基本であるからこそ曖昧なまま使い続けていた時期があり、それが小さなトラブルの原因になっていたと気づかされました。
それぞれの役割を整理すると、fetchは「リモートの情報をローカルに安全に取得する」、checkoutやswitchは「ローカルブランチを作成・切り替えする」、trackingは「ローカルとリモートのブランチを紐づけてpush/pullを簡潔にする」という明確な役割分担があります。
これらの基本操作を正確に理解し、チーム全体で共有することが、日々の開発をスムーズに進めるための土台になるのではないでしょうか。
不要になったブランチの削除方法は、「Gitのリモートブランチを削除する方法」で詳しく解説しています。
aduce株式会社では、Git運用の標準化を含む開発プロセスの最適化をIT顧問サービスとしてご支援しています。開発ワークフローの改善やチームの技術力向上にお悩みの方は、ぜひお問い合わせからお気軽にご相談ください。
