| この記事の要点 |
|
結論:fetch してから origin/ブランチ名と比較する
ローカルリポジトリで次の 2 行を実行すると、リモートリポジトリの最新状態とローカルのコミットの差分を表示できます(ブランチ名が master の場合は origin/master に読み替えてください)。
git fetch origin
git diff HEAD origin/main
よく紹介される git diff HEAD は、最新コミット(HEAD)と作業ツリーの差分、つまり「まだコミットしていない自分の変更」を表示するコマンドです。リモートとの比較にはならないので注意してください。
なぜ fetch が必要なのか(仕組み)
Git はリモートの状態を、ローカルに リモート追跡ブランチ(origin/main など)として保存しています。git diff や git log はネットワークに接続せず、このローカルのコピーを見て比較します。
git fetch: リモートの最新コミットを取得してorigin/mainを更新する。作業ツリーやローカルブランチは変更しないので安全git pull: fetch に加えてマージ(または rebase)まで行う。差分を確認したいだけなら使わない
fetch しないまま比較すると、前回 fetch した時点の古いリモート状態と比べることになります。
目的別のコマンド
| 知りたいこと | コマンド |
|---|---|
| ローカルとリモートのコミット内容の違い(全体) | git diff HEAD origin/main |
| リモートで増えた変更だけ(pull すると入ってくる内容) | git diff HEAD...origin/main |
| 自分が push していない変更だけ | git diff origin/main...HEAD |
| 作業中(未コミット)の変更も含めてリモートと比較 | git diff origin/main |
| 未 pull のコミット一覧 | git log --oneline HEAD..origin/main |
| 未 push のコミット一覧 | git log --oneline origin/main..HEAD |
| 特定のファイルだけ | git diff HEAD origin/main -- path/to/file |
ドット 2 つと 3 つの違い
git diff A B(git diff A..B と同じ)は、A と B の 2 つのスナップショットをそのまま比較します。ローカルとリモートの両方に新しいコミットがある場合、双方の変更が混ざって表示されます。
git diff A...B は、A と B の共通の祖先から B までの変更だけを表示します。「リモートで誰かが何を変えたか」だけを見たいときはこちらが分かりやすくなります。
なお git log ではドット 2 つ A..B が「B にあって A にないコミット」という意味になり、diff とは意味が異なります。
差分の見せ方を変えるオプション
# 変更されたファイル名だけ
git diff --name-only HEAD origin/main
# ファイル名と変更種別(A=追加, M=変更, D=削除)
git diff --name-status HEAD origin/main
# ファイルごとの増減行数の概要
git diff --stat HEAD origin/main
# 単語単位で差分を表示(文章の修正確認に便利)
git diff --word-diff HEAD origin/main
上流ブランチを使った短い書き方
ローカルブランチに上流(upstream)が設定されていれば、@{u}(@{upstream})でリモート追跡ブランチを指定できます。ブランチ名を毎回打たずに済みます。
git fetch
git diff HEAD @{u}
git log --oneline HEAD..@{u}
# ahead / behind のコミット数を数える(左: ローカルのみ, 右: リモートのみ)
git rev-list --left-right --count HEAD...@{u}
上流が設定されていない場合は「no upstream configured」というエラーになります。git branch -u origin/main で設定できます。
確認方法:git status で ahead / behind を見る
fetch した後の git status には、リモートとの関係が 1 行で表示されます。
Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded.
- behind: リモートに未取り込みのコミットがある(pull が必要)
- ahead: ローカルに未 push のコミットがある
- have diverged: 両方に新しいコミットがある(マージか rebase が必要)
- up to date: 最後の fetch 時点では一致している
よくある質問
差分が何も表示されないのに、リモートには変更があるはず
fetch をしていない、または比較しているブランチ名が違う(main と master、別名のブランチなど)可能性があります。git branch -r でリモート追跡ブランチの一覧を確認してください。
差分を GUI で見たい
git difftool HEAD origin/main で、設定した比較ツール(VS Code など)を起動できます。Sourcetree などの Git クライアントでも、fetch 後に両ブランチを選択して比較できます。
確認したらローカルをリモートに合わせたい
通常は git pull で取り込みます。ローカルの変更を捨ててリモートと完全に同じにしたい場合は、別記事「ローカルをリモートリポジトリの状態に戻す」の手順を参照してください。
関連
- git diff の使い方(作業ツリー/インデックス/コミット間/ブランチ間の差分抽出)
- 現在のブランチはプル用に構成されていません|remote.origin.url
- Sourcetree (Git GUI) 完全ガイド
子ページはありません
- 用語一覧
- エラー一覧
- git本体のインストール(Linux)
- Linuxサーバーへのgit導入とクライアントのセットアップ
- リモートリポジトリをローカルリポジトリとしてクローンする方法
- リモートとローカルのリポジトリを同期(pull)する方法
- 設定の確認
- gitユーザー名とemailの設定
- リモートリポジトリの作成
- ローカルリポジトリの作成
- 新規ファイル/ディレクトリをインデックスに登録
- インデックスの登録状態を確認
- ローカルリポジトリの変更をコミット
- コミット履歴の確認
- クライアントからリモートリポジトリの接続設定、確認、削除
- リポジトリへのプッシュ
- リモートリポジトリからクライアントへのSSHクローン
- リモートとローカルの差分表示
- バージョンの確認
- プロキシの設定
- ローカルをリモートリポジトリの状態に戻す
- ブランチの作成, 一覧表示, 切り替え
- ブランチのマージと削除
- リベース
- .gitignoreの書き方
- .gitignoreの設定が反映されない場合
- 特定のファイルをgitの管理から外す方法
- 参照(ORIG_HEAD, HEAD, FETCH_HEAD)
- git rm [-r --cached] の取り消し
- 一部のディレクトリ/ファイルのみをリポジトリから復元する方法
- ローカルとリモートリポジトリの有無を同期
- pushの取消し方法
- マージツールの起動方法
- Gitで「MERGING」の状態
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09