git diff - hiển thị cho tôi những thay đổi ở cuối dòng?


85

Trình chỉnh sửa của tôi đang thay đổi phần cuối dòng của các tệp nguồn của tôi. Khi tôi làm vậy git diff, tôi thấy cùng một dòng hai lần - một lần với -và một lần với +- mà không có sự khác biệt rõ ràng.

Làm cách nào git diffđể cho tôi biết sự thay đổi này thực sự là gì?


Gần trùng lặp của này (cũng đề cập dưới đây): Sở thích của tôi làgit config diff.wsErrorHighlight all
Joshua Goldberg

Câu trả lời:


64

Trước tiên, hãy đảm bảo rằng bạn đang sử dụng đầu ra có màu (ví dụ: với git diff --color) và bạn đã bật đánh dấu khoảng trắng với (ví dụ)

git config color.diff.whitespace "red reverse"

Tuy nhiên, điều này có thể không hoạt động trong mọi trường hợp, vì gitdường như không làm nổi bật khoảng trắng ở cuối cho các dòng đã xóa . Để xem khoảng trắng mà bạn đã xóa, chỉ cần sử dụng

git diff -R

để đặt khoảng trắng ở phía 'được thêm vào' của so sánh, nơi nó sẽ được đánh dấu.

Để biết thêm chi tiết, hãy xem câu trả lời tại câu hỏi SO này .


Tôi có phiên bản git 2.1.4 và tôi đã thực hiện theo đề xuất lệnh git config. Nhưng git diff vẫn không cho thấy bất kỳ sự khác biệt nào. Nếu tôi nối git diff thành hexdump -C thì không có gì hiển thị ở đó: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d là dấu ngoặc nhọn '}'.
người đàn ông không gian cardiff

37

Bạn có thể thấy sự khác biệt về kết thúc dòng bằng lệnh sau.

git diff | cat -v

Sau đó, "^ M" được in cho kết thúc CRLF (DOS), không có gì cho kết thúc LF (Unix).

Rõ ràng git diff đang làm đúng, in các ký tự CR và LF cho đuôi CRLF. Nhưng vì CR được tiêu thụ bởi bàn điều khiển, chúng tôi không thể nhìn thấy nó. Bằng cách sử dụng cat -v, chúng ta có thể hiển thị nó.


một cách tiếp cận tương tự khác là git diff > somediff && vi somediffvim cũng hiển thị CRLF là ^ M. nhưng cat -vlà gọn gàng.
Nick X

1
+1 không phải là ít nhất để cho phép tôi học hỏi, sau 20 năm sử dụng nó, một lựa chọn catmà tôi đã không biết. :-)
Harald

24

Một cách để xem các thay đổi khoảng trắng là thực hiện "word diff" theo từng ký tự với

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

Điều này làm nổi bật tất cả các thay đổi khoảng trắng ở mọi nơi trong dòng . Khoảng trắng đã xóa được bao bọc trong [--]và thêm khoảng trắng trong {++}.

Ngoài ra, theo đề xuất của Alex

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

làm nổi bật tất cả các thay đổi khoảng trắng ở cuối dòng .


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

làm nổi bật khoảng trắng khác nhau trong các dòng đã thay đổi.


Bạn đang sử dụng phiên bản git nào? git 2.1.4 trên hệ thống của tôi cho biết --ws-error-highlight = new, old là một tùy chọn không hợp lệ.
người đàn ông không gian cardiff

Tùy chọn này đã được thêm vào năm 2015 trong git 2.5.0.
MiniGod

5

Một công cụ khác biệt về đồ họa sẽ cho bạn thấy sự thay đổi tốt hơn - hãy thử git difftool.

Sử dụng meld và đặt các tùy chọn để hiển thị khoảng trắng. (Chỉnh sửa -> Tùy chọn -> Hiển thị Khoảng trắng.)

Các công cụ đồ họa khác có thể có các tùy chọn tương tự - câu trả lời + nhận xét của @ Cotton cho bạn biết cách thực hiện điều này với vimdiff.


Một công cụ khác biệt đồ họa có thể không có sẵn. Câu trả lời của @ paul-whittaker sẽ hoạt động trong ngữ cảnh được ngụ ý bởi câu hỏi (một số thiết bị đầu cuối).
beO vào

Bây giờ điều này là kỳ lạ, nhưng git difftool --tool=meld doesn'tthậm chí khởi chạy meld. Tôi không biết có phải do quá trình rebase đang diễn ra hay không.
người đàn ông không gian cardiff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.