git diff で改行とかを無視したい
目次
背景: フォーマット修正と実際のコード修正が混じる事がある
PR で、ファイルのフォーマットと実際のコード修正(機能追加・バグ修正等)が混じっている場合とかありますよね。もちろん、原則としては別々の PR にすべきなんですが、なかなか原則通りに進まないのが世の常です。
あとは、生成 AI にコードを書かせると、余計なフォーマット修正やコメント修正・削除なども行ってくる場合があります。もちろん、これも AGENTS.md 等で「余計なことすんな」と書く事である程度は対応可能ですが、なかなか理想通りにいかないこともあります。

やりたい事: git diff でスペース、改行、引用符の修正等を無視したい
スペースの無視だけであれば簡単にできる
スペースの有無、スペース vs. タブ、等の違いであれば、簡単に無視できます。diff でも git diff でも -w を付ければ良いです。
diff -w file1 file2
git diff -w
GitHub の PR でも、w=1 を付けるという方法で空白を無視できます。これは以前から知られていましたが、画面上にボタンもあるんですね。一度も使った事がなかったです。
Ignore white space in code review – The GitHub Blog
改行の有無、引用符の違い等も無視したい
やりたい事は
x = ["a", "b", "c"]
と
x = [
'a',
'b',
'c'
]
の違いを無視したい、という事です。
解決方法: difft を使う
以下のツールを使って解決しました。
Wilfred/difftastic: a structural diff that understands syntax 🟥🟩
インストール
各種パッケージマネージャーで簡単にインストールできます。
Installation – Difftastic Manual
git から使うには、alias を設定
~/.gitconfig に以下のように記載します。
[alias]
difft = -c diff.external=difft diff
使い方は、普段の git diff の代わりに git difft を使うだけです。
めちゃ便利です。
まとめ
diff や git diff では -w オプションで空白の有無などを無視できますが、改行を無視することは出来ません。difft コマンドをインストールする事で、その問題を解決できます。Git から使いたい場合には alias を設定すると良いです。
コメントを残す