
git pull は、リモートリポジトリ(GitHubなど)にある最新のコミット履歴を取得し、現在作業しているローカルブランチへ統合(マージ)するためのGitコマンドです。チーム開発や複数環境での同期作業において日常的に使われる必須操作ですが、内部の仕組みやオプションを正しく把握していないと、意図しないマージコミットが作られたり、コンフリクト(競合)に慌ててしまう原因になります。
この記事では、まずターミナル作業中にすぐコピペして使える「用途別コマンド早見表」を提示したうえで、git pull の仕組みと図解、origin やブランチ指定の意味、git fetch との決定的な違い、--rebase などの主要オプション、初心者が遭遇しやすいエラーの対処法までわかりやすく解説します。
この記事で行うこと
前提条件・対象読者
1. まずはこれだけ!git pull用途別コマンド早見表
ターミナル作業中にすぐ参照・実行できるよう、実務で頻出する git pull の基本コマンドを用途別に整理しました。
| やりたいこと | 実行コマンド | 特徴・用途 |
|---|---|---|
| 現在のブランチに変更を取り込む | git pull | 追跡ブランチの設定に従ってリモート変更を取得・統合する標準コマンド |
| リモートとブランチを明示して取り込む | git pull origin main | リモートリポジトリ(origin)とブランチ(main)を指定して安全に取り込む |
| コミット履歴をきれいに積み直して取り込む | git pull --rebase | マージコミットを作らず、ローカルコミットをリモートの最新の上に再配置する |
| fast-forward可能な場合のみ安全に取り込む | git pull --ff-only | 分岐によるマージコミットの発生を防ぎ、一本道の履歴でのみ統合を許可する |
| 変更の取得のみを行い作業ブランチは更新しない | git fetch | リモートの最新状態を確認したいが、手元の作業ファイルは動かしたくない場合に実行 |
日常の開発でそのままコピーして使える代表的なコマンド例です。
現在のブランチにそのまま最新変更を取り込む場合:
git pull
リモート(origin)と対象ブランチ(main)を明示して取り込む場合:
git pull origin main
マージコミットを作らず、ローカルコミットを綺麗に積み直したい場合:
git pull --rebase
リモートの変更内容だけを確認し、作業ファイルへの統合は後回しにしたい場合:
git fetch
2. git pullとは?基本概念と内部動作イメージ
git pull は、リモートリポジトリに push された最新のコミットを取得し、手元のローカルブランチに反映・合流させるためのコマンドです。
内部動作:fetchと統合の組み合わせ
git pull は単一の独立した処理を行っているわけではありません。裏側では、以下の2つの処理を連続して自動実行しています。
git fetch:リモートリポジトリの最新コミットデータを取得し、ローカルの「リモート追跡ブランチ(origin/mainなど)」を更新する- 統合処理(
mergeまたはrebase):更新されたリモート追跡ブランチの内容を、現在チェックアウトしているローカルブランチ(mainなど)に合流させる
リモートリポジトリ (GitHub等)
│
│ ① git fetch(変更のダウンロード)
▼
リモート追跡ブランチ (origin/main)
│
│ ② git merge / rebase(ローカルへの統合)
▼
ローカルブランチ (main)
│
▼
作業ディレクトリ(手元の作業ファイルに反映)
以前は「git pull は fetch と merge を同時に実行する」と単純に説明されることが一般的でしたが、設定やオプション(--rebase など)によって統合方法を柔軟に切り替えられるのが現代の Git の仕様です。
origin と main の意味を分解する
よく目にする git pull origin main というコマンドは、以下の3つの要素に分解して理解すると構造が明確になります。
つまり git pull origin main は、「接続先 origin のリモートブランチ main から最新の変更を取得し、今自分が作業しているローカルブランチへ統合する」という具体的な指示になります。
引数を省略して単に git pull と打った場合は、現在のブランチにあらかじめ設定された「上流ブランチ(upstream)」の設定に従って自動的に取得元が決定されます。
3. git pullの基本的な使い方と実行手順
ここでは、最も標準的な実行手順と、ターミナルに表示される実行結果の見方を解説します。
基本手順1:リモートとブランチを指定して実行
作業中のリポジトリで、リモートの最新状態を取り込む基本コマンドを実行します。
# 現在のブランチを確認
git branch
# リモート origin の main ブランチから最新コミットを取得・統合
git pull origin main
基本手順2:実行結果(ログ)の見方
正常に git pull が完了すると、ターミナルには次のようなログが出力されます。
$ git pull origin main
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 980 bytes | 49.00 KiB/s, done.
From https://github.com/example-user/sample-repo
* branch main -> FETCH_HEAD
72e4b34..fb0435d main -> origin/main
Updating 72e4b34..fb0435d
Fast-forward
src/index.ts | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
表示される重要項目の見方は以下の通りです:
取り込みが完了したら、git log --oneline -n 3 などで履歴が最新の位置まで進んでいるかを確認しましょう。
4. git pull と git fetch の違い|安全な使い分け
初心者が最も疑問に感じやすいのが、「git pull と git fetch はどう違うのか?どちらを使うべきなのか?」という点です。
両者の役割の違いを比較表にまとめました。
| 比較項目 | git fetch | git pull |
|---|---|---|
| リモートの最新履歴を取得するか | 取得する | 取得する |
| 現在の作業ブランチ(ファイル)を更新するか | 更新しない(手元の作業ファイルはそのまま) | 更新する(取得後に即座にマージ・変更が反映される) |
| ローカルの変更と競合(コンフリクト)する可能性 | なし(統合しないため絶対に競合しない) | あり(ローカルのコミットとぶつかると競合が発生する) |
| コミット履歴への影響 | リモート追跡ブランチのみ最新化 | 現在のローカルブランチにマージコミットが作られる場合がある |
| 向いている場面 | チームメンバーの更新内容を事前に安全に確認したいとき | リモートの変更を今すぐ手元に合流させて作業を続けたいとき |
実務での安全な使い分けフロー
チーム開発や本番環境への反映など、予期せぬマージ事故を防ぎたい場面では、いきなり git pull を打つのではなく、「まず git fetch して差分を確認してから git merge する」という2段階のフローを踏むのが安全なプラクティスです。
# 1. リモートの最新情報を取得(ローカルブランチは変更されない)
git fetch origin
# 2. 現在のブランチとリモート最新(origin/main)の差分を確認
git diff main origin/main
# 3. 差分に問題がないことを確認してから統合
git merge origin/main
一人で開発している場合や、ローカルに変更がないことが確実な場合は、手軽な git pull で問題ありません。
5. 覚えておきたい実務オプション(–rebase / –ff-only)
チームの Git 運用ルールやブランチの履歴方針に応じて、以下の2つの主要オプションを使い分けると便利です。
1. 履歴を直線的に保つ:–rebase
--rebase を指定すると、通常の「マージ(合流)」の代わりに「リベース(再配置)」を行います。
git pull --rebase origin main
通常の git pull では、リモート側とローカル側の両方にコミットがある場合、枝分かれを合流させるための空のマージコミット(Merge branch 'main' of ...)が自動生成されます。
--rebase を使うと、自分がローカルで作成したコミットを一時的に脇に退避させ、リモートの最新コミットを取り込んだ後に、その先端へ自分のコミットを積み直します。これにより、コミット履歴が枝分かれせず、一本の綺麗な直線として維持されます。
2. 意図しないマージを防ぐ:–ff-only
--ff-only(Fast-Forward Only)は、履歴が一本道で「早送り(Fast-forward)」できる場合のみ統合を許可し、分岐マージが必要な場合は処理を中断するオプションです。
git pull --ff-only origin main
手元にローカルコミットが存在し、リモートと枝分かれしている状態でこれを実行すると、マージコミットを作らずにエラー終了します。意図しないマージコミットの乱立を防ぎたいプロジェクトで重宝されます。
6. git pull でよくあるエラーと代表的な対処法
git pull 実行時にターミナルへ赤字や警告が出た場合の代表的な原因と、初心者が安全に復旧できる対処法をまとめました。
エラー1:作業中のローカル変更が上書きされる
error: Your local changes to the following files would be overwritten by merge:
index.html
Please commit your changes or stash them before you merge.
Aborting
原因:手元の作業ファイルに変更が残っている状態で git pull を実行すると、リモートの変更で上書きされて作業内容が消えてしまうのを防ぐために Git が処理をブロックしています。
対処法:手元の作業内容を一時退避するか、コミットしてから再実行します。
# 変更を一時退避する
git stash
# 最新の変更を取得・統合
git pull origin main
# 退避していた手元の変更を復元する
git stash pop
エラー2:コンフリクト(競合)が発生した
CONFLICT (content): Merge conflict in src/App.tsx
Automatic merge failed; fix conflicts and then commit the result.
原因:同じファイルの同じ行を、リモート側とローカル側の両方で別々に変更していたため、どちらを優先すべきか Git が自動判定できず停止した状態です。
対処法:
git statusで競合しているファイルを確認します。- 対象ファイルを開くと、
<<<<<<< HEADから>>>>>>>で囲まれた競合箇所が挿入されているので、残したいコードを残してマーカーを削除・保存します。 - 修正したファイルをステージングし、マージコミットを作成します。
# 修正後にステージング
git add src/App.tsx
# マージコミットを作成して完了
git commit -m "Resolve merge conflict in App.tsx"
もし一旦マージを取り消して作業前の状態に戻したい場合は、以下のコマンドで安全に中断できます。
git merge --abort
※ git pull --rebase の実行中に競合した場合は、git rebase --abort を使用します。
エラー3:追跡先(upstream)が設定されていない
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
原因:現在のブランチがリモートのどのブランチと対応しているか(追跡ブランチ)が未登録の状態で、引数なしの git pull を実行したためです。
対処法:明示的にリモートとブランチ名を指定して実行するか、追跡設定を紐付けます。
# 方法1:リモートとブランチ名を明示して実行
git pull origin main
# 方法2:現在のブランチの上流ブランチとして登録(次回以降 git pull だけで実行可能)
git branch --set-upstream-to=origin/main
7. まとめ
git pull は、リモートリポジトリの最新変更を手元の作業ブランチへ素早く取り込むための基本コマンドです。
まずは冒頭のコマンド早見表を参考に、自分の作業状況に合った安全な取り込み手順を試してみてください。
次に読むおすすめ記事
Gitの全体像やブランチ運用、日々の開発で必須となる基本コマンドを体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。

- git switchとcheckoutの違いとは?ブランチ切り替えと使い分け解説
- git status の使い方と見方まとめ
- git add の使い方と取り消し手順
- git commit の使い方とコミットメッセージの書き方
- git push の使い方とリモート反映手順
- git fetch の使い方と仕組み解説
- git stash で作業中の変更を一時退避する方法

