【Git】リモートブランチの取り込み方法を初心者向けに解説
はじめに
皆さんはGitを使って共同開発をするとき、リモートリポジトリにあるブランチをどうやって取り込むのか悩んだことはないでしょうか。
リモートブランチは、チームメンバーがプッシュしたコードを共有するための重要な場所です。
開発では、自分が作業しているブランチだけでなく、他のメンバーのブランチ内容を取り込む必要が出てくることが多くあります。
そこで今回は、初心者の方にもわかりやすくリモートブランチの取り込み方法について解説していきます。
この記事を読むとわかること
- Gitにおけるリモートブランチの役割と仕組み
- リモートブランチの取り込みに必要な基本的なコマンドの使い方
- 実務でどんなタイミングや作業フローで取り込みを行うのか
- コンフリクト(衝突)やエラーが起きたときの対処方法
これらを知っておくと、Gitを使ったチーム開発で混乱しにくくなります。
リモートブランチの基本を押さえよう
まずはリモートブランチの概念をつかみ、取り込み作業の全体像をイメージしてみましょう。
リモートブランチとは何か
リモートブランチとは、リモートリポジトリ上に存在するブランチのことを指します。
たとえば、GitHubやGitLabといったホスティングサービス上にあるリポジトリにプッシュされたブランチは、すべてリモートブランチです。
一方で、開発者のパソコン上(ローカル環境)にあるブランチはローカルブランチと呼ばれます。
リモートブランチとローカルブランチの違い
リモートブランチとローカルブランチには、以下のような違いがあります。
- リモートブランチはサーバー上にあり、他の開発者もアクセスできる状態にある
- ローカルブランチは手元の開発環境(自分のPC)でのみ操作可能
- 他の人が作業した変更を取り込む場合は、リモートブランチを参照する
実務では、チームメンバーがそれぞれ作業を終えたら、ローカルブランチの状態をリモートブランチにプッシュします。
そのプッシュ内容を自分のローカルに取り込むことで、最新のコードを共有しながら開発が進められるわけです。
リモートブランチを取り込むタイミングと目的
リモートブランチを取り込む具体的なタイミングは、プロジェクトや運用ルールによって異なります。
ただし、代表的なケースとしては以下のような場面が考えられます。
- 他のメンバーの作業が終わり、最新コードを手元に持ってきたいとき
- 自分が作成したブランチを一度リモートにアップし、再度作業を再開するとき
- リモートでレビューや修正が行われた内容をローカルに反映したいとき
これらの作業がスムーズにできないと、コードのバージョンがずれてしまうことが多いです。
結果としてコンフリクトが大量に発生してしまったり、作業内容が重複してしまったりする恐れがあります。
逆に、リモートブランチをうまく取り込めるようになると、チームのコードを常に最新状態に保つことができるので、開発効率がぐっと上がります。
リモートブランチを取り込む方法の全体像
ここでは、リモートブランチの取り込み方法を大まかにまとめてみましょう。
以下の流れで把握すると、作業がしやすくなります。
- リモートリポジトリの状況を確認する
- 取り込みたいリモートブランチをローカルに反映させる
- ローカルブランチとの統合(マージ)を行う
やや抽象的に感じるかもしれませんが、順を追って具体的に解説していきます。
リモートリポジトリの状況を確認する
リモートブランチの取り込み前には、まずリモートリポジトリがどのような状態になっているかを把握することが重要です。
リモートリポジトリのURLとブランチ一覧の確認
最初のステップとして、リモートリポジトリと自分のローカルリポジトリが正常に関連付けられているかを確認しましょう。
git remote -v
このコマンドを実行すると、リモートリポジトリのURL(リモート名:通常は origin
)が表示されるはずです。
もし何も表示されない場合は、そもそもリモートリポジトリが設定されていない可能性があります。
その場合は git remote add origin <リポジトリのURL>
のようにコマンドを実行し、リモートリポジトリを紐づける必要があります。
さらに、現在リモートに存在するブランチを確認するには以下のようにします。
git fetch git branch -r
これにより、リモートにあるブランチ(例:origin/main
や origin/feature/something
)を一覧で確認できます。
取り込みたいリモートブランチをローカルに反映させる
リモートブランチをローカルに反映するための方法は大きく分けてfetchとpullの2つが使われます。
fetchとpullの違い
fetchは、リモートリポジトリ上の変更をローカルのリポジトリ(リモート追跡ブランチ)までダウンロードするだけです。
一方、pullはfetchに加えて、自動でローカルブランチにマージ(またはリベース)まで行います。
- fetch
- リモート側の更新情報のみ取得
- ローカルブランチへのマージは手動で行う
- pull
- リモート側の更新情報を取得してローカルブランチに反映
- 簡単な操作で最新コードをすぐに取り込める
初心者のうちはpullを多用するかもしれませんが、細かい作業フローをコントロールしたい場合は、fetchで状況を確認してから手動でマージする方法もあります。
fetchを使って取り込む
リモートブランチをfetchで取り込むには次のコマンドを使います。
git fetch origin
origin
はリモートリポジトリの名前です。
このコマンドによって、リモートにある変更内容が手元のリモート追跡ブランチにダウンロードされます。
ただし、まだローカルブランチに統合されたわけではありません。
取り込みたいブランチが feature/new-ui
という名前の場合は、まず以下で確認します。
git branch -r
そこで origin/feature/new-ui
が表示されたら、次のように作業すればよいです。
git checkout feature/new-ui git merge origin/feature/new-ui
もしローカルに feature/new-ui
が存在しない場合は、以下のようにリモート追跡ブランチをローカルブランチとして新規作成できます。
git checkout -b feature/new-ui origin/feature/new-ui
これでリモートブランチをローカルへ取り込み、かつ作業が始められる状態になります。
pullを使って取り込む
一方で、もっと簡単にリモートブランチの変更をローカルに反映したいときはpullを使います。
git pull origin feature/new-ui
これで origin/feature/new-ui
の内容がローカルの feature/new-ui
に直接反映されます。
ただし、コンフリクトが生じた場合は、どちらの変更を残すか手動で解決する必要があります。
pullは便利な反面、変更内容の確認やマージ手順が自動で進んでしまうので、状況によっては意図しないブランチへのマージが起きることもあります。
そのため、コードレビューの前などでじっくり確認したい場合にはfetch→手動マージ、速やかに最新状態にしたい場合にはpull、というように使い分けると良いでしょう。
実務でのリモートブランチ取り込みフロー
ここからは、具体的にどんな場面でリモートブランチの取り込みが行われるかを、実務のシーンを想定して見ていきます。
開発中のブランチに最新のmainを取り込みたい場合
新しい機能を開発しているときに、ほかのメンバーが main
ブランチへ修正をプッシュすることがあります。
すると、自分のブランチと main
ブランチが大きく乖離してしまい、後でマージするときにコンフリクトが多発するかもしれません。
そこで、自分のブランチに最新の main
を頻繁に取り込むことで、このリスクを下げられます。
たとえば以下のようにします。
git checkout main git pull origin main git checkout feature/new-ui git merge main
これで main
の更新内容を feature/new-ui
に適用できます。
更新量が少ないうちに取り込めば、コンフリクトの解決も比較的シンプルに行えるでしょう。
同じ機能ブランチで共同作業をするとき
同じ機能ブランチを複数人で触るケースでは、いろいろな人がリモートブランチにプッシュを行います。
自分以外のメンバーがリモートの同じブランチを更新した場合は、定期的にpullやfetch→mergeで内容を取り込むことが必要です。
git pull origin feature/new-ui
更新がないかを常に確認しながら進めることで、作業の重複や不要なコンフリクトを避けられます。
コンフリクトが発生したらどうする?
リモートブランチの取り込み時に変更箇所がかぶると、 コンフリクト (衝突) が発生します。
コンフリクトが起きると、対象ファイルに <<<<<<< HEAD
や =======
、>>>>>>> branch_name
のような記述が入り、どの行を残すかを自分で選択する必要があります。
コンフリクトの基本的な対処手順
- 該当ファイルをエディタで開き、競合している行を手動で修正する
- 修正が終わったら保存し、ステージング (
git add .
) - コミットして (
git commit
) コンフリクト解消完了
これらは怖いと思うかもしれませんが、いざやってみるとシンプルな作業です。
実務ではエディタやIDEがコンフリクト箇所をわかりやすく表示してくれることも多いので、特別なツールを覚えなくても大丈夫です。
コンフリクトが続出する原因の多くは、ブランチの管理が雑になっているケースです。 こまめにリモートブランチを取り込み、不要なブランチを放置しないようにすることが大切です。
よくあるエラーやトラブルシューティング
リモートブランチの取り込みでよくあるトラブルとして、fast-forwardができない、リモート追跡ブランチとローカルブランチの設定がずれているなどが挙げられます。
fast-forward できないエラー
pullやmergeを行うときに、fast-forwardできないというエラーが表示されることがあります。
これは、ローカルブランチにリモートブランチとは別のコミット履歴があるため、自動的に直列で統合できない状況を示します。
解決策としては、マージコミットを作るか、リベースでコミットの並びを整理する方法があります。
どちらを採用するかは、プロジェクトのルールや方針に合わせると良いです。
リモート追跡ブランチが存在しない
リモートブランチをpullしようとしたら、リモート追跡ブランチが設定されておらずエラーになった、というケースもあります。
その場合は、次のように追跡設定を追加します。
git branch --set-upstream-to origin/feature/new-ui feature/new-ui
これをすると、feature/new-ui
ブランチは origin/feature/new-ui
と同期されるため、今後は git pull
だけで自動的にリモートを追跡できます。
マージの際に気をつけたいポイント
リモートブランチを取り込む際は、マージ方法にも目を向けておきたいところです。
merge と rebase の違い
ローカルブランチを最新の状態に合わせるには、mergeかrebaseを行うのが基本です。
- merge
- コミット履歴に「mergeコミット」が追加される
- 履歴をわかりやすく保ちやすい
- rebase
- ブランチを元のブランチの先頭に付け替える
- コミット履歴が直線的になるが、共有リポジトリのコミット履歴を書き換えるのは注意が必要
チームの方針によっては、基本的にrebaseを使わずにmergeのみで履歴を管理するところもあります。
まとめてマージするか、小まめにマージするか
マージの単位が大きいと、一度に解決しなければならないコンフリクトの規模も大きくなりがちです。
逆に小まめにマージを行えば、コンフリクトが起きても原因が特定しやすくなります。
複数のメンバーが同時進行で作業するプロジェクトほど、定期的にリモートブランチを取り込む習慣をつけることで、トラブルを最小限に抑えられるでしょう。
ブランチの作成・マージは短いスパンで行うと、コンフリクト解消やコードレビューが楽になります。
ブランチの整理と削除
リモートブランチの取り込みが完了し、不要になったブランチは放置しないようにしましょう。
不要なブランチを削除する
以下のようにコマンドを実行すると、リモート上のブランチを削除できます。
git push origin --delete feature/new-ui
また、ローカルの不要なブランチは git branch -d feature/new-ui
のようにして削除できます。
リモートもローカルも放っておくとブランチが増えすぎて混乱するため、役目を終えたブランチはこまめに削除する習慣が大切です。
まとめ
ここまで、リモートブランチの取り込み方法を中心に解説してきました。
初心者の方は、fetchとpullの使い分けや、コンフリクト時の対処に慣れるだけでも大きく成長できるはずです。
また、実務ではチームメンバーとコミュニケーションをとりながら、適切なタイミングでリモートブランチを取り込みます。
こまめな取り込みがトラブル回避やスムーズな開発進行につながりますので、ぜひ習慣として定着させてください。