###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>
以上。