git diff で行末に ^M が表示されるのは改行コードが CRLF になっているから
git diff
で変更箇所の行末に ^M
が表示される現象に遭遇しました。
原因
改行コードが CRLF
になっていたのが原因でした。
git には空白文字の扱いを決める core.whitespace
という設定があり,そこで blank-at-eol
が有効になっていると,git diff
した際に改行コードの前にある空白文字をエラーとして報告してくれます。
デフォルトでは CR
は改行コードの一部ではなく空白文字として扱われるので,改行コードが CRLF
になっていると CR
の部分がエラーとなり,キャレット記法 ^M
で反転表示されます。
解決方法
まず考えられるのは,改行コードをすべて LF
にすることです。
改行コードを変更したくない・変更できない事情がある場合は,core.whitespace
に cr-at-eol
を有効にして CR
を改行コードの一部として認識させる方法もあるようです。
$ git config --global core.whitespace cr-at-eol
[core] whitespace = cr-at-eol
core.autocrlf
を true
で運用している場合も,この設定を併用するとよいのではないでしょうか。