Câu trả lời:
Bạn cần sử dụng -M để cho phép git tự động phát hiện tệp đã di chuyển khi khác. Sử dụng git diffnhư knittl đã đề cập không làm việc cho tôi.
Vì vậy, đơn giản: git diff -Mnên làm điều đó.
Tài liệu cho việc chuyển đổi này là:
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index
(i.e. amount of addition/deletions compared to the file’s size). For example,
-M90% means git should consider a delete/add pair to be a rename if more than
90% of the file hasn’t changed.
~/.gitconfigkhông?
git diff. Chạy git diff -Mtrên một tệp (đã đổi tên) không báo cáo đổi tên.
git log --follow -- file_after_move.txthoạt động tốt. Nó cho thấy toàn bộ lịch sử, bao gồm cả trước khi di chuyển. Có ý kiến gì không? Tôi đang chạy git version 2.11.0.windows.1.
-Ctùy chọn cho việc phát hiện bản rất hữu ích và tương tự. Tôi đã sử dụng nó -Mđể xem xét một khác biệt nơi tôi đã tái cấu trúc một tệp thành hai (không có tên nào khớp với bản gốc).
Ngoài những gì knittl đã viết , bạn luôn có thể sử dụng:
git diff HEAD:./oldfilename newfilename
trong đó HEAD:./oldfilenamecó nghĩa là oldfilename trong lần xác nhận cuối cùng (trong HEAD), liên quan đến thư mục hiện tại.
Nếu bạn không có đủ git mới, bạn sẽ phải sử dụng thay thế:
git diff HEAD:path/to/oldfilename newfilename
git diff 39fa7c77e85c51d43ea0cf30d33aec8721812e9e:./oldfilename newfilename
git diff branch:old/filen.name newfilename
cdvào thư mục và không thêm --trước commit:pathcặp. Git dường như rất kén chọn với cú pháp ở đây.
<commit-ish>:<pathname>Cú pháp là một định danh đối tượng, một cái gì đó Git-ish; sau khi --Git chỉ mong đợi tên tập tin.
Với git 2.9 (tháng 6 năm 2016), bạn sẽ không phải thêm -Mnữa. git diffsử dụng -Mtheo mặc định.
Xem cam kết 5404c11 , cam kết 9501d19 , cam kết a9276a6 , cam kết f07fc9e , cam kết 62df1e6 (25 tháng 2 năm 2016) của Matthieu Moy ( moy) .
(Được hợp nhất bởi Junio C Hamano - gitster- trong cam kết 5d2a30d , ngày 03 tháng 4 năm 2016)
diff: kích hoạtdiff.renamestheo mặc địnhĐổi tên phát hiện là một tính năng rất thuận tiện và người dùng mới không cần phải tìm hiểu tài liệu để hưởng lợi từ nó.
Sự phản đối tiềm năng để kích hoạt phát hiện đổi tên là đôi khi nó thất bại, và đôi khi nó chậm. Nhưng phát hiện đổi tên đã được kích hoạt theo mặc định trong một số trường hợp như "
git status" và "git merge", vì vậy kích hoạtdiff.renameskhông làm thay đổi căn bản tình hình. Khi phát hiện đổi tên không thành công, giờ đây nó không thành công giữa "git diff" và "git status".Cài đặt này không ảnh hưởng đến các lệnh hệ thống ống nước, do đó các tập lệnh được viết tốt sẽ không bị ảnh hưởng.
git diff -Mkích hoạt phát hiện đổi tên như những người khác đã nói (và như @VonC đã chỉ ra, nó được kích hoạt theo mặc định từ git 2.9). Nhưng nếu bạn có một bộ thay đổi lớn, phát hiện đổi tên không chính xác vẫn có thể bị tắt một lần nữa. Git sẽ hiển thị một cảnh báo như sau, rất dễ bỏ lỡ giữa các khác biệt bạn đang xem:
warning: inexact rename detection was skipped due to too many files.
warning: you may want to set your diff.renameLimit variable to at least 450 and retry the command.
Trong trường hợp đó, hãy đặt tùy chọn cấu hình theo đề xuất của git, ví dụ:
git config diff.renamelimit 450
và chạy lại lệnh diff của bạn.
Vì bất kỳ lý do gì, việc sử dụng HEAD:./oldfilename(hoặc đường dẫn tuyệt đối) không hiệu quả với tôi, nhưng HEAD:oldfilenameđã làm (cảm ơn cmn):
git diff HEAD:oldfilename newfilename
git diff 2a80f45:oldfilename f65f3b3:newfilename
HTH
HEAD:./oldfilename?
chỉ đơn giản là chạy git diffmà không có bất kỳ đối số, hoặc git diff -- newfilename. git đủ thông minh để so sánh các tệp / nội dung phù hợp (nghĩa là nội dung gốc trước khi đổi tên với nội dung bị thay đổi sau khi đổi tên)
git mvmột tệp duy nhất và sau đó so sánh trạng thái theo giai đoạn với một nhánh khác giống hệt nhau sẽ tạo ra "mọi thứ đã bị xóa và được tạo lại" khác trừ khi -Mđược sử dụng.
git diff -- yourRenamedFilesẽ là đủ. Xem câu trả lời của tôi dưới đây