git khác nhau hai tệp trên cùng một nhánh, cùng một cam kết


97

xin lỗi nếu câu hỏi này tồn tại, tôi ngạc nhiên là không thể tìm thấy nó: /

Làm cách nào tôi có thể thực hiện git diffgiữa hai tệp trong cùng một nhánh & cùng một cam kết?

I E git diff fileA.php fileB.php

(lý tưởng nhất là với mã màu dễ đọc gitcung cấp .... hoặc tương tự như những gì chương trình BeyondCompare làm!)


Lưu ý: Git: Làm thế nào để khác biệt hai tệp khác nhau trong các cam kết khác nhau? hơi chung chung hơn câu hỏi này, nhưng câu trả lời về cơ bản giống với câu trả lời chính xác cho câu hỏi này và nó không có tất cả những câu trả lời không có thật, vì vậy tôi đã bỏ phiếu để đóng nó như một bản dupe của nó.
SamB

Câu trả lời:


84

Bạn không cần git cho điều đó, chỉ cần sử dụng diff fileA.php fileB.php(hoặc vimdiff nếu bạn muốn so sánh song song)


22
vimdiffđể giành chiến thắng! Cảm ơn!
d -_- b

24
Điều này có thể hoạt động, nhưng nó không phải là git khác. Đó là một định dạng đầu ra hoàn toàn khác.
daboross

11
Điều này không trả lời câu hỏi ban đầu
DylanYoung

8
Tôi không đồng ý, OP không rõ ràng nhưng thực tế là anh ấy đề cập đến BeyondCompare ngụ ý rằng anh ấy không đặc biệt tìm kiếm một git diffsự khác biệt mà chỉ đơn giản là một sự khác biệt dễ đọc. Ngoài ra, việc anh ấy chấp nhận câu trả lời của tôi như những gì anh ấy đang tìm kiếm cũng chỉ ra rằng nó thực sự trả lời nó.
JaredMcAteer

3
đọc kỹ câu trả lời. lệnh diff fileA fileBkhônggit diff fileA fileB
Matthew Hinea

247

Nếu bạn muốn sử dụng git difftrên hai tệp tùy ý, bạn có thể sử dụng git diff --no-index <file_a> <file_b>. Hai tệp không cần phải được theo dõigit để làm việc.


32
1 vì nó trả lời câu hỏi inital (không phân biệt "tại sao bạn sẽ làm điều đó" ... có thể có lý do)
NobodysNightmare

19
--word-diffđiểm nổi bật thay đổi bằng lời, không chỉ dòng
user3148949

2
Đối với những người trong chúng ta sử dụng PowerShell, đây là một cách dễ dàng hơn nhiều để có được sự khác biệt của hai tệp trong một repo.
Jay Soyer,

2
Làm thế nào mà câu trả lời xuất sắc này được liệt kê bên dưới 2 câu trả lời sớm hơn, ít phiếu bầu hơn (và ít hữu ích hơn) khi sắp xếp theo "hoạt động" ??? Tôi thậm chí không đếm câu trả lời được đánh dấu là đúng. Dù sao cũng cảm ơn!
j_random_hacker

@daboross Trong GNU diffutils 3.4+ (2016-08-08), diff--colorthể hữu ích (xem unix.stackexchange.com/a/338960 ). Nhưng ngay cả sau đó, nếu sử dụng diff-so-fancy, nó dường như yêu cầu định dạng đầu ra cụ thể của git diff. diff -u(xem stackoverflow.com/a/4857407/10095231 ) không hoạt động.
kelvin

14

Nếu các tệp bạn muốn so sánh nằm trong bản sao làm việc của mình, bạn có thể sử dụng đơn giản diffnhư được trỏ bởi những người khác, tuy nhiên nếu các tệp nằm trong một số bản sửa đổi, bạn có thể chỉ định một bản sửa đổi cho mỗi tệp

git diff <revision_1>:<file_1> <revision_2>:<file_2>

như đã lưu ý ở đây: https://stackoverflow.com/a/3343506/1815446

Trong trường hợp của bạn (chỉ định cùng một bản sửa đổi cho cả hai tệp):

git diff <revisionX>:fileA.php <revisionX>:fileB.php

Lưu ý: Một phiên bản có thể HEAD~2, một SHA-1, một tên chi nhánh, vv
ma11hew28

Điều này phù hợp với tôi, chỉ so sánh tên tệp từ hai thư mục khác nhau: git diff --name-only HEAD:dir1 HEAD:dir1_backup hoạt động sau một git addtrong cả hai thư mục.
Frank Forte

1
Điều này hoạt động nếu bản sửa đổi không được kiểm tra trong cây làm việc hoặc các tệp cây làm việc được sửa đổi và người ta muốn khác bản gốc hoặc nếu không có cây làm việc nào, như trong một repo git trần. Thật không may là câu hỏi được đánh giá cao này có các câu trả lời được đánh giá cao trả lời cho một câu hỏi vẫn hữu ích, nhưng khá khác biệt, "làm cách nào tôi có thể nhận được git-diff như đầu ra mà không sử dụng git?"
TrentP

4

Để làm cho khác biệt gnu thông thường trông giống git diff, tôi muốn giới thiệu các tham số sau:

diff -burN file_or_dir1 file_or_dir2

(nơi -bbỏ qua khoảng trắng, -ukhác biệt hợp nhất, -rđệ quy, -Ncoi các tệp bị thiếu là/dev/null ).

Nó hoạt động tuyệt vời, nhưng vẫn không có màu sắc và tự động phân trang kiểu git hầu như không có. Nếu bạn muốn sửa cả hai, hãy cài đặt colordiffvà sử dụng nó như sau:

colordiff -burN file_or_dir1 file_or_dir2 | less -R

Điều này cho kết quả đầu ra và giao diện rất gần với thực tế git diff.


4
-1 vì "bạn không thể" không chính xác (xem: stackoverflow.com/a/13965200/968531 )
NobodysNightmare

Loại bỏ "bạn không thể", thêm hướng dẫn cài đặt colordiff và đây có thể là câu trả lời OK cho câu hỏi ban đầu.
DylanYoung


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.