| この記事の要点 |
|
結論: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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38