Gitの小ネタおれおれAdvent Calendar 2022 – 23 日目

VS Code といったリッチなエディターや IDE でも良いんですが、量が多くないときはコマンドラインから差分を確認したりしてます。

エイリアスはこんな感じで登録。

[alias]
        d = diff --color-words=\"\\\\w+\"
        diffc = diff --cached
        dc = diff --cached --color-words=\"\\\\w+\"
        diffl = log -1 -p

git diff で普通の diff

今作業中の変更を表示します。もし既に git add されている、staged 状態のものがあれば、その後からの変更になります。

まあご存じですよね。

$ git diff
diff --git a/README.md b/README.md
index 77ecebf..0ffc258 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# Hello Word!
+# Hello World!

diff を表示した様子。変更前 “-” の行は赤色、変更後 “+” の行は緑色で表示される。

git diff --color-words で単語単位の diff

普通の diff は行単位で変更を表示しますが、--color-words オプションで単語単位になります。

$ git diff --color-words="\w+"
diff --git a/README.md b/README.md
index 26f0260..cc0be1e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
 # Hello WordWorld!

白黒だとわけわかんないね。スクショをご覧ください。

赤色の “Word” と緑色の “World” が並んでいる。それぞれ通常の “-” と “+” に相当。

値 "\w+" の部分は「単語」を定義する正規表現です。省略できるけど初期値だと記号とかもくっ付いて着色されてしまい不便。

エスケープがだるい

ちなみに .gitconfig に書き出すときはエスケープが面倒なことに。

[alias]
        d = diff --color-words=\"\\\\w+\"

git diff --cached で stage 上の変更を表示

普通の git diff は作業中の変更と staged なものとの差分を表示しますが、--cached を付けると既に git add した変更を表示してくれます。

見た目は普通の git diff と同じなので例は省略。

--cached と --color-words の両方で stage 上の変更を単語単位で表示

合わせ技です。便利。

git log --patch でコミットの変更を表示

git diff じゃなくて git log です。-p、--patch を付けるとそのコミットで行われた変更を表示してくれます。

あと --max-count=1 あるいは -1 を付けると 1 件だけ表示して終わってくれます。差分を見たいなっていう気分のときはそっちの方が便利。

$ git log -1 -p
commit d37b0a164fa82aa860dd67e675b2ec0a7fb6a44c (HEAD -> master)
Author: Ginpei <[email protected]>
Date:   Thu Dec 22 16:50:04 2022 +0900

    typo

diff --git a/README.md b/README.md
index 26f0260..cc0be1e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-# Hello Word!
+# Hello World!

通常のコミットログの後に diff が表示されている様子。

おしまい

あと git add --patch もよく使ってます。コミット前のレビューがてら。

参考