git pull|基本の使い方からブランチ指定・fetchとの違いまで

コマンドリファレンス

git pull は、リモートリポジトリの最新の変更をローカルに取り込むコマンドです。チーム開発では毎日使う基本操作であり、正しく理解しておくことで予期しないコンフリクトや事故を防げます。

本記事では、git pull の基本的な使い方から、git fetch との違いブランチを指定した pull、コンフリクト発生時の対処まで整理します。

よく使うコマンド一覧

まず、git pull でよく使うコマンドをまとめます。詳細は各セクションで解説します。

# 現在のブランチをリモートから更新する
git pull

# リモート名とブランチ名を明示して pull する
git pull origin main

# 別のブランチを指定して pull する
git pull origin feature/login

# rebase モードで pull する(マージコミットを作らない)
git pull --rebase

# リモートの変更を確認してから pull する(fetch → diff)
git fetch origin
git diff HEAD origin/main

1. git pull とは

git pull は、リモートリポジトリから変更を取得し、現在のブランチにマージするコマンドです。内部的には git fetch + git merge の2ステップを一括で実行しています。

# git pull は以下の2コマンドと同じ動作をする
git fetch origin
git merge origin/main

引数を省略すると、現在チェックアウトしているブランチのトラッキングブランチ(通常は origin/<現在のブランチ名>)を対象に pull します。

# main ブランチにいる場合、以下は同じ意味
git pull
git pull origin main

2. git pull と git fetch の違い

git pullgit fetch はどちらもリモートから変更を取得しますが、その後の動作が異なります。

コマンドリモートの変更を取得ローカルブランチへのマージ安全性
git fetchしない高い(ローカルは変更されない)
git pull自動でマージするコンフリクトが起きる場合がある

2-1. git fetch:取得だけして手元は変えない

git fetch はリモートの変更をローカルに取得しますが、作業ブランチには自動でマージしません。取得した内容は origin/main などのリモートトラッキングブランチに保存されます。

# リモートの最新情報を取得(ローカルブランチは変更されない)
git fetch origin

# 取得した変更を確認してからマージする
git diff HEAD origin/main
git merge origin/main

「まずリモートの変更内容を確認してから手元に取り込みたい」場合は git fetch が向いています。

2-2. git pull:取得してそのままマージする

git pull は fetch と merge を一括で実行するため、リモートの変更がそのままローカルブランチに反映されます。日常的な「最新コードへの追いつき」では git pull が便利です。

ただし、ローカルに未プッシュのコミットがある状態で git pull を実行すると、マージコミットが作成されることがあります。これを避けたい場合は --rebase オプションを使います。

# マージコミットを作らず、自分のコミットをリモートの先に積み直す
git pull --rebase

3. ブランチを指定して pull する

git pull はリモート名とブランチ名を明示することで、任意のブランチの変更を取り込めます。

# 書き方
git pull <リモート名> <ブランチ名>

# origin の main ブランチを pull する
git pull origin main

# origin の develop ブランチを pull する
git pull origin develop

# upstream という別のリモートから main を pull する
git pull upstream main

ブランチ名を省略した場合は、現在のブランチのトラッキング設定が使われます。

3-1. 別ブランチの変更を現在のブランチに取り込む

現在 feature/my-feature ブランチにいて、main の最新変更を取り込みたい場合の典型的な手順です。

# feature ブランチにいる状態で main の最新をマージする
git pull origin main

# または fetch + merge で明示的に行う
git fetch origin
git merge origin/main

3-2. –rebase で履歴をきれいに保つ

チーム開発では、マージコミットが増えると履歴が読みにくくなります。--rebase を使うと、自分のコミットをリモートの最新コミットの後ろに付け直すため、履歴が一直線に保たれます。

# rebase モードで pull(マージコミットが生まれない)
git pull --rebase origin main

# デフォルトを rebase にする設定
git config --global pull.rebase true

4. コンフリクトが起きた場合

git pull でリモートの変更を取り込む際、ローカルと同じファイルの同じ箇所が両方で編集されているとコンフリクト(競合)が発生します。

4-1. コンフリクトの確認

git pull 後にコンフリクトが起きると、以下のようなメッセージが表示されます。

Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

コンフリクトしているファイルは git status で確認できます。

git status
# 出力例:
# both modified:   README.md

4-2. コンフリクトの解消手順

コンフリクトが発生したファイルを開くと、以下のようなマーカーが挿入されています。

<<<<<<< HEAD
ローカルの変更内容
=======
リモートの変更内容
>>>>>>> origin/main

マーカー部分を手動で編集して最終的な内容に修正し、マーカー行を削除します。その後、以下の手順でコミットします。

# 解消後のファイルをステージングする
git add README.md

# コンフリクト解消のコミットを作成する
git commit

4-3. pull を中止して元の状態に戻す

コンフリクトの解消が難しい場合は、git merge --abort で pull 前の状態に戻せます。

# マージを中止して pull 前の状態に戻す
git merge --abort

# --rebase で pull した場合
git rebase --abort

5. よくある疑問

git pull と git fetch はどちらを使えばいいか

日常的に「最新に追いつく」だけなら git pull で十分です。「まずリモートの変更内容を確認してから取り込みたい」「作業中のファイルに影響を与えたくない」場合は git fetch を使いましょう。

git pull したらマージコミットができてしまう

ローカルに未プッシュのコミットがある状態で git pull を実行すると、マージコミットが作られます。履歴をきれいに保ちたい場合は git pull --rebase を使うか、git config --global pull.rebase true でデフォルト設定を変更しましょう。

git pull origin main と git pull の違いは何か

引数を省略した git pull は、現在のブランチのトラッキングブランチを対象にします。明示的に git pull origin main と書くと、originmain ブランチを指定して pull します。トラッキング設定が正しく行われていれば同じ結果になりますが、明示することでミスを防ぎやすくなります。

error: Your local changes would be overwritten が出た場合

ローカルで未コミットの変更があると、このエラーが表示されます。git stash で一時退避してから pull し、その後 git stash pop で変更を戻します。

# 未コミットの変更を一時退避
git stash

# pull を実行
git pull

# 退避した変更を戻す
git stash pop

git pull –ff-only とは何か

--ff-only オプションを付けると、fast-forward(ローカルのブランチポインタを前に進めるだけでマージできる場合)のときのみ pull を実行し、コンフリクトやマージコミットが必要な場合はエラーになります。自動マージを避けたいチームで使われます。

# fast-forward のみ許可する
git pull --ff-only

# エラー例(diverge している場合)
# fatal: Not possible to fast-forward, aborting.

まとめ

git pull の使い方をまとめます。

  1. git pull の正体:git fetch + git merge の一括実行。リモートの変更を取得して現在のブランチにマージする。
  2. git fetch との違い:fetch は取得のみでローカルブランチを変更しない。安全に変更内容を確認してから取り込みたいときは fetch を使う。
  3. ブランチ指定git pull origin main のようにリモート名とブランチ名を明示できる。省略した場合はトラッキングブランチが使われる。
  4. –rebase で履歴をきれいにgit pull --rebase を使うとマージコミットを作らずに履歴を一直線に保てる。
  5. コンフリクトの解消:コンフリクトが起きたらファイルのマーカーを編集し、git add + git commit で完了。中止する場合は git merge --abort
  6. 未コミットの変更がある場合git stash で変更を退避してから pull し、git stash pop で戻す。

git fetch のより詳しい使い方は「Gitとは?初心者向け完全ガイド」も参考にしてください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント