git pullとは?使い方・fetchとの違い・基本コマンド

git pull は、リモートリポジトリ(GitHubなど)にある最新のコミット履歴を取得し、現在作業しているローカルブランチへ統合(マージ)するためのGitコマンドです。チーム開発や複数環境での同期作業において日常的に使われる必須操作ですが、内部の仕組みやオプションを正しく把握していないと、意図しないマージコミットが作られたり、コンフリクト(競合)に慌ててしまう原因になります。

この記事では、まずターミナル作業中にすぐコピペして使える「用途別コマンド早見表」を提示したうえで、git pull の仕組みと図解、origin やブランチ指定の意味、git fetch との決定的な違い、--rebase などの主要オプション、初心者が遭遇しやすいエラーの対処法までわかりやすく解説します。

この記事で行うこと

  • 日常の開発で役立つ git pull 用途別コマンド早見表の確認
  • git pull の仕組みと内部動作イメージ(fetch と merge の関係)の理解
  • origin や main を指定する基本構文の習得
  • git pull と git fetch の実務的な違いと安全な使い分けの理解
  • --rebase や --ff-only など実務オプションの活用
  • 遭遇しやすい代表的なエラー(未コミット変更、コンフリクト等)への対処

前提条件・対象読者

  • Gitの基本操作(git addgit commitgit push など)を一通り触ったことがある方
  • git pull コマンドを実行しているが、具体的に何が起きているか正確に把握したい方
  • git pull origin main などのリモート・ブランチ指定や fetch との違いをスッキリ整理したい方

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つの処理を連続して自動実行しています。

  1. git fetch:リモートリポジトリの最新コミットデータを取得し、ローカルの「リモート追跡ブランチ(origin/main など)」を更新する
  2. 統合処理(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:取得対象となるリモートブランチの名前(旧来のリポジトリでは master の場合もあります)

つまり 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(-)

表示される重要項目の見方は以下の通りです:

  • Fast-forward:ローカル側に独自のコミットが存在せず、リモートの履歴へまっすぐ進めるだけの統合(早送りマージ)が行われたことを示します。マージコミットは生成されません。
  • src/index.ts | 12 +++++++++---:更新されたファイル名と、追加行数(+)、削除行数(-)の概要です。

取り込みが完了したら、git log --oneline -n 3 などで履歴が最新の位置まで進んでいるかを確認しましょう。

4. git pull と git fetch の違い|安全な使い分け

初心者が最も疑問に感じやすいのが、「git pull と git fetch はどう違うのか?どちらを使うべきなのか?」という点です。

両者の役割の違いを比較表にまとめました。

比較項目git fetchgit 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 が自動判定できず停止した状態です。

対処法:

  1. git status で競合しているファイルを確認します。
  2. 対象ファイルを開くと、<<<<<<< HEAD から >>>>>>> で囲まれた競合箇所が挿入されているので、残したいコードを残してマーカーを削除・保存します。
  3. 修正したファイルをステージングし、マージコミットを作成します。
# 修正後にステージング
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 pull origin main でリモート名とブランチ名を明示して実行するのが確実
  • 内部の仕組み:git fetch(変更の取得)+ 統合処理(merge または rebase)の組み合わせ
  • git fetch との使い分け:安全に変更内容を事前確認したい場合は git fetch、即座に合流させたい場合は git pull
  • 履歴の整理:きれいな直線のコミット履歴を保ちたい場合は git pull --rebase が有効
  • トラブル回避:未コミットの変更がある場合は、あらかじめ git stash や git commit を済ませてから pull する

まずは冒頭のコマンド早見表を参考に、自分の作業状況に合った安全な取り込み手順を試してみてください。

次に読むおすすめ記事

Gitの全体像やブランチ運用、日々の開発で必須となる基本コマンドを体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。

【完全版】Git初心者向けガイド|基本コマンドから実務トラブル解決まで
プログラムの開発やWeb制作において、いまや必須スキルとなったバージョン管理システム「Git(ギット)」。しかし、これからGitを学び始める初心者の方にとって、「ワークツリーやステージングなど聞き慣れない言葉が多い」「ブランチやマージの仕組…

参考情報