LoginSignup
4
2

More than 3 years have passed since last update.

【Git】git diff HEAD~~..HEADとは何をしているか?。指定したファイル間の差分を確認する方法。

Posted at

git diff HEAD~~..HEADとは何をしているか?

指定したコミット間の差分をHEADを使って指定して、確認する方法について。

git diff

git diff はコミットの差分を確認するためのコマンド。どのコードを追加 or 削除したかというのが確認できる。

git diffの指定の方法によって、何と何を比較するかというパターンが結構ある

デフォルトのgit diffのみでは、前回のコミットと、ステージ前のワークツリーの状態を比較している。

▼git diffの注意点
git diffは、ファイルだけでなくディレクトリを丸毎指定したり、ステージ前とステージを比較したり、リモートブランチと比較したり、様々な状態を比較して確認できる。

ある意味便利だが、一つ一つ見ていかないと混乱しやすいコマンド。


指定したコミット間の差分をみる

git diffの後ろに2つの値をつけると、指定したコミットを比較することができる。

git diff 前のコミット番号..後のコミット番号

コミット番号の指定方法は、ハッシュ値(SHA)でも指定できるし、HEADでも指定できる

わかりやすくするためコミットを前、後としたが、前のコミット番号は元となるファイルで、後ろのコミット番号との間でどれだけ変化したかを表示する。

※ドットは省略できる
ドットは省略しても同じ挙動になる。

git diff 前のコミット番号 後のコミット番号


ハッシュ値(SHA)

コミット番号のハッシュ値はgit logで確認できる。オプションの--oneline --graphをつけると見やすい

$ git log --oneline --graph
* 3e6a20f (HEAD -> master) add c
* d639d81 add b
* 5363dd1 add a

冒頭についている、7桁の数値(3e6a20fなど)がそのコミット番号。

--onelineなどで表示したコミット番号は省略されており、コミットが増えてくると表示される桁数も増える。

本来のコミット番号はgit logで確認できる。

コミット番号(フル)
$  git log
commit 3e6a20fcf9f00b28c0d07b96335c82fb6314d0ef (HEAD -> master)
Author: Name <name@gmail.com>
Date:   Thu Feb 18 22:04:01 2021 +0900

    add c


HEAD

ハッシュ値以外のコミットの指定方法にHEADがある。HEADは現在のコミットを基点として、さかのぼる数を指定する。

さかのぼる数は^~で指定する。(キャレットかチルダ)

▼HEADの考え方

* 3e6a20f (HEAD -> master) add c
* d639d81 add b
* 5363dd1 add a

↓ HEADと対応するコミット

  • HEAD 3e6a20f
  • HEAD^ d639d81
  • HEAD^^ 5363dd1

または

  • HEAD 3e6a20f
  • HEAD~ d639d81
  • HEAD~~ 5363dd1


git diff HEAD~~..HEADの意味

以上より、git diff HEAD~~..HEADは、2つ前のコミットと現在のコミットを比較しているということ。

$ git diff HEAD~~..HEAD
diff --git a/resources/views/line.blade.php b/resources/views/line.blade.php
index 1795ce6..af20ab6 100644
--- a/resources/views/line.blade.php
+++ b/resources/views/line.blade.php
@@ -72,4 +72,6 @@

 <div>a</div>
+<div>b</div>
+<div>c</div>

+が前のコミットから追加された内容。bとcのdivタグが追加されている。

git diff HEAD..HEAD~~

比較するファイルの順番を逆にするとどうなるか?

基準元のファイルがHEADになり、2つ前のコミット時点のファイルとの差分を表示する。

$ git diff HEAD..HEAD~~
diff --git a/resources/views/line.blade.php b/resources/views/line.blade.php
index af20ab6..1795ce6 100644
--- a/resources/views/line.blade.php
+++ b/resources/views/line.blade.php
@@ -72,6 +72,4 @@

 <div>a</div>
-<div>b</div>
-<div>c</div>

最新のコミットから見れば、昔のファイルは、-でbとcのdivタグがなかったことがわかる。

ドットはなくてもOK

コミット番号の間を繋ぐドット2つは省略できる。

$ git diff HEAD^^ HEAD
diff --git a/resources/views/line.blade.php b/resources/views/line.blade.php
index 1795ce6..af20ab6 100644
--- a/resources/views/line.blade.php
+++ b/resources/views/line.blade.php
@@ -72,4 +72,6 @@

 <div>a</div>
+<div>b</div>
+<div>c</div>



以上。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2