Tại sao “git log -‌- foo” không hoạt động cho foo tệp đã xóa?


89

Kho lưu trữ của tôi đã trải qua những thay đổi như:

  1. ... một số cam kết không liên quan ...
  2. Cam kết tệp mới foovới 100 dòng nội dung
  3. ... cam kết can thiệp, một số trong số đó chạm foovào ...
  4. Chèn nội dung fooở đầu tệp hiện có bargit rm footrong cùng một cam kết
  5. ... các cam kết không liên quan khác ...

Bây giờ tôi muốn xem nhật ký của tệp đã xóa foo. Mọi thứ tôi đã đọc, kể cả trên SO, đều nói rằng tôi có thể làm được git log -- foo, nhưng lệnh đó không tạo ra kết quả nào.

Nếu tôi tìm thấy cam kết bao gồm xóa footôi có thể git log 1234abcd -- foovà xem nhật ký của nó, vì vậy tôi nghĩ rằng con đường của tôi đến fookhông phải là vấn đề. Cũng lưu ý rằng git merge-base HEAD 1234abcdkết quả đầu ra 1234abcd[...], vì vậy tôi nghĩ rằng điều đó sẽ chứng minh cam kết có thể truy cập được HEAD. Lưu ý rằng không có tệp nào footrong cây làm việc của tôi (hiển nhiên, vì nó đã bị xóa). Sử dụng Git 1.7.1.1 trên OS X.

Tại sao không git log -- foohiệu quả với tôi và làm thế nào tôi có thể sửa chữa nó? Cảm ơn!


5
Bạn đã thử git log --follow -- foohoặc git log --follow -M -- foo? (để buộc phát hiện đổi tên)
VonC

1
Khỉ thật, tôi đã thử - --follownhưng đọc historytôi thấy tôi đã có từ ở nơi khác khi tôi thử nó, làm cho đường dẫn không hợp lệ. git log --follow -- foođã hoạt động khi tôi cố gắng từ điểm xuất phát phù hợp. Tôi đoán Git coi lăn foovào barnhư một số loại đổi tên? Trong mọi trường hợp, cảm ơn bạn! Tôi sẽ sẵn lòng ghi nhận điều này nếu bạn sẽ đăng lại nó như một câu trả lời.
user385804 07/07/10

1
Gây phiền nhiễu mà --được thay đổi để trong tiêu đề câu hỏi ...
Cascabel

Câu trả lời:


118

Bạn muốn sử dụng --followtùy chọn bật git log, được mô tả trong trang người đàn ông là:

Continue listing the history of a file beyond renames.

Một cách hiệu quả, điều này không chỉ cho phép bạn xem lịch sử của một tệp đã được đổi tên mà còn cho phép bạn xem lịch sử của một tệp không còn trong cây làm việc. Vì vậy, lệnh bạn nên sử dụng sẽ giống như sau:

git log --follow -- foo

Cập nhật:

Git 2.9+ hiện đã bật tính năng này theo mặc định cho tất cả git diffgit logcác lệnh:

Theo mặc định, người dùng cuối phải đối mặt với các lệnh cấp Sứ trong họ "git diff" và "git log" cho phép phát hiện đổi tên; bạn vẫn có thể sử dụng biến cấu hình "diff.renames" để tắt điều này.

Cảm ơn x-yuri vì những thành công!


1
Nó làm việc cho tôi mà không có --followmột phần. Tôi chỉ cần thêm --. Tôi đang chạy git-2.9.0.
x-yuri
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.