git diff-行末の変更を表示しますか?


86

私のエディタは私のソースファイルの行末を変更しています。するとgit diff、同じ行が2回表示されます(1回は-と、もう1回は+と)。目に見える違いはありません。

git diffこの変更が実際に何であったかをどのように表示できますか?


近く重複この(また、後述の):私のお気に入りですgit config diff.wsErrorHighlight all
ジョシュア・ゴールドバーグ

回答:


64

まず、色付きの出力(withなどgit diff --color)を使用していることと、空白の強調表示を(eg)で有効にしていることを確認します。

git config color.diff.whitespace "red reverse"

ただし、削除された行のgit末尾の空白を強調表示するようには見えないため、これはすべての場合に機能するとは限りません。削除した空白を表示するには、単に使用します

git diff -R

比較の「追加」側に空白を配置し、強調表示します。

詳細については、このSOの質問の回答を参照してください。


私はgitバージョン2.1.4を持っており、gitconfigコマンドの提案に従って行動しました。しかし、gitdiffはまだ違いを示していません。gitdiffをhexdump-Cにパイプすると、そこには何も表示されません 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|。7dは「}」中括弧です。
カーディフスペースマン

37

次のコマンドで行末の違いを確認できます。

git diff | cat -v

次に、「^ M」はCRLF(DOS)で終わる場合は出力され、LF(Unix)で終わる場合は何も出力されません。

どうやらgitdiffは正しいことをしていて、CRLFの終わりにCRとLFの文字を出力しているようです。ただし、CRはコンソールによって消費されるため、表示されません。cat -vを使用すると、表示することができます。


別の同様のアプローチはgit diff > somediff && vi somediff、vimがCRLFを^ Mとしても表示することです。しかし、それcat -vはきちんとしています。
ニックX

1
+1は、20年間使用した後、cat私が気付いていなかったオプションを私に学ばせてくれました。:-)
ハラルド

25

空白の変更を確認する1つの方法は、文字ごとに「単語の差分」を実行することです。

git diff --color --word-diff-regex=.

これにより、行内のすべての空白の変更が強調表示されます。取り外した空白はに包まれている[--]し、中に空白を追加{+して+}

あるいは、アレックスによって提案されたように

git diff --color --ws-error-highlight=new,old

終わりにあるすべての空白の変更を強調表示します。


12
git diff --ws-error-highlight=new,old

変更された行の空白の差分を強調表示します。


どのバージョンのgitを使用していますか?私のシステムのgit2.1.4は、-ws-error-highlight = new、oldが無効なオプションであると言っています。
カーディフスペースマン

このオプションは、2015年にgit2.5.0で追加されました。
MiniGod

5

グラフィカルな差分ツールを使用すると、変更がより適切に表示されますgit difftool。試してみてください。

meldを使用し、空白を表示するように設定します。([編集]-> [設定]-> [空白を表示])。

他のグラフィカルツールにも同様のオプションがあります。@ Cottonのanswer + commentは、vimdiffを使用してこれを行う方法を示しています。


グラフィカルな差分ツールが利用できない場合があります。@ paul-whittakerによる回答は、質問によって暗示されるコンテキストで機能します(一部の端末)。
2018年

今これは奇妙ですが、git difftool --tool=meld doesn'tメルドを起動することさえできます。リベースが進行中かどうかはわかりません。
カーディフスペースマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.