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