git khác nhau giữa hai tệp khác nhau


109

Trong HEAD(bản cam kết mới nhất), tôi có một tệp có tên foo. Trong cây làm việc hiện tại của tôi, tôi đã đổi tên nó thành barvà cũng chỉnh sửa nó.

Tôi muốn git diff foovào HEAD, và bartrong cây làm việc hiện tại của tôi.


64
Tôi nghĩ câu hỏi này (từ tiêu đề) có thể là về việc sử dụng git diff trên hai tệp không nhất thiết phải có trong repo. Tôi thấy rằng cờ --no-index là để làm điều đó, ví dụ: git diff --no-index --word-diff old_file.txt new_file.txt(--word-diff đánh dấu các thay đổi theo từng từ, không chỉ theo dòng, điều này cực kỳ hữu ích cho văn bản dài).
Pat

Câu trả lời:


134

Chỉ định các đường dẫn một cách rõ ràng:

git diff HEAD:full/path/to/foo full/path/to/bar

Kiểm tra --find-renamestùy chọn trong git-diff tài liệu .

Tín dụng: twaggs .


9
Tôi muốn đề cập rằng bạn có thể so sánh hai tệp bất kỳ bằng cách sử dụng git diff <path> <path>ngay cả khi chúng không nằm trong kho lưu trữ git.
mitenka

1
@mitenka Tôi không nghĩ điều đó chính xác. Nếu bạn nhìn vào, git diff --helpbạn sẽ thấy rằng các mẫu duy nhất được hỗ trợ cho hai tệp là git diff [<options>] --no-index [--] <path> <path>. git diff a bchỉ khớp với các mẫu cam kết, không phải tệp.
Doug

@Doug Đây là trích dẫn từ lệnh trợ giúp mà bạn đã đề cập, git-scm.com/docs/git-diff : Hiển thị [...] thay đổi giữa hai tệp trên đĩa.
mitenka

@mitenka trợ giúp cho biết, trừ khi bạn sử dụng '--no-index', nó không so sánh các tệp; bình luận của bạn nên là một câu trả lời riêng biệt; nó không đúng và nó không liên quan đến câu trả lời này.
Doug

1
@Doug Cảm ơn ý kiến ​​của bạn. Đây là trích dẫn giúp bạn tham khảo: Bạn có thể bỏ qua --no-indextùy chọn khi chạy lệnh trong cây làm việc do Git điều khiển và ít nhất một trong các điểm đường dẫn bên ngoài cây làm việc hoặc khi chạy lệnh bên ngoài cây làm việc do Git điều khiển .
mitenka

77

Tôi tin rằng sử dụng --no-indexlà những gì bạn đang tìm kiếm:

git diff [<options>] --no-index [--] <path> <path>

như đã đề cập trong hướng dẫn sử dụng git:

Biểu mẫu này là để so sánh hai đường dẫn đã cho trên hệ thống tệp. Bạn có thể bỏ qua các --no-indextùy chọn khi chạy lệnh trong một cây làm việc điều khiển bởi Git và ít nhất một trong những điểm đường dẫn bên ngoài cây làm việc, hoặc khi chạy lệnh bên ngoài một cây làm việc điều khiển bởi Git.


1
@swe đây chắc chắn là một câu trả lời hữu ích, nhưng OP đã cho biết cụ thể tệp nằm trong HEAD, có nghĩa là nó nằm trong chỉ mục git. Câu trả lời được chấp nhận giải quyết trực tiếp câu hỏi. Ngoài ra, câu trả lời được chấp nhận có khởi đầu 6 năm;)
Michael Delgado

3
Điều này có thể không giúp được gì cho OP, nhưng nó chính xác là thứ tôi đang tìm kiếm.
thislooksfun

Điều này trả lời câu hỏi được đăng bởi tiêu đề, nếu bạn không thích điều này trên web.
Merlin

3

Nếu bạn đang sử dụng git rùa, bạn có thể nhấp chuột phải vào tệp và git a diff bằng cách: Nhấp chuột phải vào tệp đầu tiên và thông qua menu con rùa rùa chọn "Khác sau" Sau đó, trên tệp thứ hai, bạn cũng có thể nhấp chuột phải vào tệp này , đi tới menu con rùa biển và sau đó chọn "Khác với yourfilenamehere.txt"


-12

Sử dụng PhpStorm, tôi chỉ cần sao chép mã cam kết trước và so sánh nó với phiên bản hiện tại bằng cách sử dụng công cụ "so sánh với clipboard" được tích hợp sẵn.


5
PhpStorm là một IDE thương mại. Câu hỏi này là về cách thực hiện điều này trong chính cli git, không có phần mềm bổ sung.
Charles Taylor
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.