PR

Gitの差分確認コマンドを徹底解説 – origin/mainとHEADの違いを理解する

広告

今回は、Gitで使用する差分確認コマンドについて、特にgit diff origin/main..HEADgit diff HEAD..origin/mainの違いを詳しく解説していきます。

前提条件の確認

まず、以下のような状態でGitコマンドを実行してみました。

PS C:\MyProject>git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean

この状態では、

  • メインブランチにいる
  • ローカルブランチはリモートのorigin/mainと同期している
  • コミットする変更がなく、作業ディレクトリはクリーンな状態

git diffコマンドの実行結果

続いて、以下の差分確認コマンドを実行。

git diff
git diff origin/main..HEAD
git diff HEAD..origin/main

これらはすべて空の出力を返しました。しかし、実際にはリモートに新しい変更がプッシュされていた場合、なぜ差分が表示されなかったのでしょうか?

広告

重要なポイント:git fetchの必要性

どちらの差分確認コマンドを使用する場合でも、まずgit fetchの実行が必要です。

これは以下の理由によります。

  • origin/mainはローカルに保存されているリモートブランチの参照
  • git fetchを実行しないと、この参照が古いままになってしまう
  • その結果、正確な差分が確認できない

正しい差分確認の手順

両方のコマンドで、以下の手順を踏むことが重要です。

  1. まずリモートの最新情報を取得:
git fetch origin
  1. その後で差分を確認:
# ローカルの変更を確認する場合
git diff origin/main..HEAD

# リモートの変更を確認する場合
git diff HEAD..origin/main

git diff origin/main..HEADとgit diff HEAD..origin/mainの違い

これら2つのコマンドは、比較の方向が異なります。必ずgit fetchを先に実行する

git diff origin/main..HEAD

  • リモート(origin/main) → ローカル(HEAD)への変更を表示
  • 「リモートと比べて、ローカルで何が変更されたか」を確認できる

git diff HEAD..origin/main

  • ローカル(HEAD) → リモート(origin/main)への変更を表示
  • 「ローカルと比べて、リモートで何が変更されたか」を確認できる

具体例で理解する

例えば、ファイルの中身が以下の状態だとします。

  • origin/main: “Hello”
  • HEAD: “Hello World”

この場合(git fetch実行後):

# git diff origin/main..HEAD の結果:
+ World
(プラス記号で表示:ローカルで"World"が追加された)

# git diff HEAD..origin/main の結果:
- World
(マイナス記号で表示:ローカルから見るとリモートでは"World"が無い)
広告

実践的な使い方

  1. 自分のローカルでの作業内容を確認したい場合、
git fetch origin
git diff origin/main..HEAD
  1. 他の人がリモートにプッシュした変更を確認したい場合、
git fetch origin
git diff HEAD..origin/main

まとめ

先にgit fetchを実行する

差分の方向性を意識してコマンドを使い分ける。

  • ローカルの変更確認:git diff origin/main..HEAD
  • リモートの変更確認:git diff HEAD..origin/main

git statusの表示だけでは、リモートの最新状態は分からない。

これらの点を押さえておけば、より効率的にGitでの変更管理が行えるようになります!

以下のリンクでは、Git及びGitHubに関する記事をまとめています。Gitの基本操作やブランチ管理、GitHubでのリポジトリ管理、共同作業のコツなど。気になるトピックをクリックして、詳しい情報を確認してください。

タイトルとURLをコピーしました