チーム開発でGitを使っていると、「他のメンバーが作成したリモートブランチをローカルに持ってきて作業を始めたい」という場面に頻繁に遭遇します。慣れてしまえば何気ない操作ですが、fetch・checkout・trackingの関係を正しく理解していないと、意図しないブランチで作業してしまったり、pushやpull時にエラーが出たりすることがあります。本記事では、この一連の手順を体系的に整理してお伝えします。
リモートブランチを取得するfetchの役割と使い方
Gitで他のメンバーが作成したブランチを取得する最初のステップは git fetch です。ここで重要なのは、fetchはリモートリポジトリの情報をローカルにダウンロードするだけで、作業ディレクトリには一切影響を与えないという点です。
# リモートの最新情報をすべて取得 git fetch origin # 特定のブランチだけを取得したい場合 git fetch origin feature/user-auth
fetchを実行すると、ローカルには origin/feature/user-auth のようなリモート追跡ブランチが作成・更新されます。この段階ではあくまで「リモートの状態を知った」だけであり、自分の作業ブランチとしてはまだ存在していません。
筆者自身、Git を使い始めた頃は git pull との違いがよく分からず、とりあえずpullしていた時期がありました。しかしpullはfetchとmerge(またはrebase)を同時に行うコマンドです。意図しないマージが発生するリスクを避けるためにも、まずfetchで情報を取得し、内容を確認してから次のステップに進む習慣をつけることをお勧めします。
リモートブランチの一覧を確認するには、以下のコマンドが便利です。
# リモートブランチの一覧を表示 git branch -r # ローカルとリモートの両方を表示 git branch -a
同じように「fetchしたはずなのにブランチが見えない」と悩んでいる方も多いのではないでしょうか。その場合は git fetch --prune を試してみてください。リモートで削除済みのブランチ参照がローカルに残っていると、一覧が煩雑になり、目的のブランチを見つけにくくなることがあります。
checkoutでローカルブランチを作成して切り替える
fetchでリモートブランチの情報を取得できたら、次はローカルブランチを作成して作業を開始します。ここで使用するのが git checkout または git switch です。
# リモートブランチと同名のローカルブランチを作成して切り替え 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-auth
Git 2.23以降で導入された git switch コマンドを使う方法もあります。checkoutはブランチの切り替えとファイルの復元という2つの異なる機能を持っており、switchはブランチ操作に特化したコマンドとして分離されました。
# switchコマンドでの同様の操作 git switch feature/user-auth # 明示的に作成する場合 git switch -c feature/user-auth origin/feature/user-auth
checkoutとswitchのどちらを使うかはチームの方針次第ですが、新しいプロジェクトではswitchを採用するケースが増えてきていると感じます。一概にどちらが優れているとは言えない部分もありますので、チーム内で統一しておくとよいでしょう。
trackingの設定と確認方法を理解する
ローカルブランチとリモートブランチの紐づけを「トラッキング(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を簡潔にする」という明確な役割分担があります。
これらの基本操作を正確に理解し、チーム全体で共有することが、日々の開発をスムーズに進めるための土台になるのではないでしょうか。
aduceでは、Git運用を含む開発プロセス全体の最適化や、チーム開発体制の構築をIT顧問サービスとして支援しています。開発ワークフローの改善やチームの技術力向上にお悩みの方は、ぜひaduceのお問い合わせはこちらからお気軽にご相談ください。
