git fetchとgit pullの違いを完全理解|リモート追跡ブランチとコンフリクト対処まで解説
旅行しながらコードを書いていると、カフェのWi-Fiで急いでGit操作をする場面が結構あります。
メキシコの安宿で深夜に「git pullしたらコンフリクト地獄になった」こともありました。 チーム開発では特に、リモートリポジトリとローカルリポジトリの関係を理解していないと事故ります。
この記事では、git fetch と git pull の違い、リモート追跡ブランチの考え方、コンフリクト対処方法まで、実際に手を動かしながら理解できるようにまとめます。
git fetchとgit pullを理解する前に知るべきこと
Git初心者が最初につまずくのが、「リモート」と「ローカル」の関係です。
Gitでは大きく分けて以下の2つが存在します。
- GitHub上などに存在するリモートリポジトリ
- 自分のPC内にあるローカルリポジトリ
そして、その橋渡し役になるのが リモート追跡ブランチ です。
リモート追跡ブランチ(remote tracking branch)とは?
リモート追跡ブランチとは、リモートリポジトリの状態をローカル側で記録しているブランチのことです。
例えば以下のような表示を見たことがあると思います。
origin/main
この origin/main がリモート追跡ブランチです。
つまり、
- origin → リモートリポジトリ名
- main → リモート側のブランチ名
を意味しています。
旅行先で別メンバーがpushしていた変更を確認したい時、この概念を理解しているとかなり楽になります。
上流ブランチ(upstream branch)の設定
Git操作をシンプルにする重要概念が「上流ブランチ」です。
上流ブランチを設定しておくと、毎回ブランチ名を書かなくても pull や push ができます。
git branch --set-upstream-to=origin/main
これを設定しておくと、
git pull
だけで更新できるようになります。
長期旅中、ネットが不安定な環境だとコマンドミスが地味にストレスなので、上流ブランチ設定はかなり便利でした。
リモート追跡ブランチの確認方法
チーム開発では、現在どんなブランチが存在しているか把握するのが重要です。
リモートブランチ一覧を確認する
git branch -r
これで現在のリモート追跡ブランチ一覧を確認できます。
詳細情報を確認する
git remote show origin
このコマンドでは、
- 追跡されているブランチ
- push先
- fetch先
- 現在の設定
などを確認できます。
特に tracked と表示されているものは、現在追跡対象になっているブランチです。
現在の追跡状況を確認する
git branch -vv
どのローカルブランチが、どのリモートブランチを追跡しているか一目でわかります。
リモート追跡ブランチを使って最新状態から作業する
新機能開発を始める時、古いブランチから作業すると事故ります。
最新状態からブランチを切る癖をつけるとかなり安全です。
リモート追跡ブランチから新規ブランチを作成
git checkout -b 新しいブランチ名 origin/リモートブランチ名
例えば:
git checkout -b feature-login origin/main
これで最新のmainブランチ状態から開発できます。
リモート追跡ブランチを更新する
git fetch origin
不要な追跡ブランチを削除する
git branch -dr origin/ブランチ名
git fetchとは?安全に変更を取得するコマンド
git fetchは、リモートリポジトリの変更をローカルにダウンロードするコマンドです。
ただし重要なのは、 まだ自分の作業ブランチには反映されない という点です。
基本コマンド
git fetch origin main
これはリモートmainブランチの最新状態を取得します。
fetchのメリット
- 安全に最新状態を確認できる
- いきなりマージされない
- コンフリクト確認前の下準備になる
実際、海外のコワーキングスペースで作業していた時、pull前にfetchだけして差分確認する癖がかなり役立ちました。
取得内容を確認する
git log --oneline origin/main
fetch後に差分確認してからmergeする流れは、現場でもかなり使われています。
git pullとは?fetchとmergeを同時に行うコマンド
git pullは以下をまとめて実行します。
- git fetch
- git merge
基本コマンド
git pull origin main
上流ブランチ設定済みなら、
git pull
だけでOKです。
git pullのメリット
- 一発で最新化できる
- 操作がシンプル
- 初心者でも扱いやすい
注意点
便利ですが、突然コンフリクトが起きる可能性があります。
特に複数人開発では、
- 同じファイル
- 同じ行
- 近いコード
を編集していると競合しやすいです。
git pull時に発生したコンフリクト対処方法
最初にコンフリクトを見た時、正直かなり焦りました。
ターミナルに大量の文字が出て、「壊れた?」と思う人も多いはずです。
コンフリクト発生時の流れ
- 競合ファイルを開く
- 競合箇所を目視確認
- 不要部分を削除
- 修正後にadd
- commitする
コンフリクト例
<<<<<<< HEAD
ローカル変更
=======
リモート変更
>>>>>>> origin/main
この部分を手動修正します。
Gitは万能ではなく、最後は人間が判断する必要があります。
git pullで使える便利テクニック
Fast Forwardのみ許可
git pull --ff-only origin main
不要なマージコミットを防げます。
マージメッセージ省略
git pull --no-edit origin main
rebaseで履歴を綺麗にする
git pull --rebase origin main
履歴を一直線に保ちたい時に便利です。
まとめ|git fetchとgit pullを理解するとGit操作が一気に楽になる
最初は難しく感じるGitですが、リモート追跡ブランチの概念を理解するとかなり整理されます。
特に重要なのは以下です。
- fetchは「取得のみ」
- pullは「取得+統合」
- リモート追跡ブランチを理解する
- 上流ブランチ設定で効率化する
- コンフリクトは落ち着いて手動修正する
旅しながら開発していると、ネット環境も作業環境も安定しません。
だからこそGitの基本理解が、本当に大事だと感じています。
焦ってpullして事故る前に、まずはfetchで状況確認。
この癖がつくだけでも、かなり安全に開発できるようになります。







0 件のコメント:
コメントを投稿