git - Tìm cam kết nơi tập tin đã được thêm vào


208

Nói rằng tôi có một tập tin foo.jsđã được cam kết một thời gian trước đây. Tôi chỉ muốn tìm cam kết nơi tập tin này được thêm vào lần đầu tiên.

Sau khi đọc câu trả lời và tự mày mò, điều này hiệu quả với tôi

git log --follow --diff-filter=A --find-renames=40% foo.js

Câu trả lời:


316

Đây là cách đơn giản hơn, "Git thuần túy" để làm điều đó, không cần đường ống dẫn:

git log --diff-filter=A -- foo.js

Kiểm tra tài liệu. Bạn có thể làm điều tương tự cho Đã xóa, Sửa đổi, v.v.

https://git-scm.com/docs/git-log#Documentation/git-log.txt---diff-filterACDMRTUXB82308203

Tôi có một bí danh tiện dụng cho việc này, vì tôi luôn quên nó:

git config --global alias.whatadded 'log --diff-filter=A'

Điều này làm cho nó đơn giản như:

git whatadded -- foo.js

Một lớp lót bên dưới sẽ tìm kiếm đệ quy thông qua các thư mục con của $PWDfor foo.jsmà không phải cung cấp và đường dẫn tuyệt đối hoặc tương đối đến tệp, cũng như tệp không cần phải nằm trong cùng thư mục với$PWD

git log --diff-filter=A -- **foo.js

27
+1! Tuy nhiên, tệp của tôi nằm trong thư mục con, vì vậy chỉ hoạt động sau khi tôi thêm dấu hoa thị ở phía trướcgit log --diff-filter=A -- *subfolder/foo.js
Geo

4
Làm thế nào để nó hoạt động trên các tệp được hợp nhất từ ​​các nhánh khác, nhưng không nhất thiết phải thêm vào nhánh được người dùng thực hiện hợp nhất?
g33kz0r

Liên kết doc ở trên không chuyển đến thông tin cờ. Có lẽ nó đã thay đổi kể từ khi đăng. git-scm.com/docs/git-log#Documentation/ từ
webbower

1
Đúng, họ đã thay đổi cấu trúc neo trong các tài liệu. Cập nhật, cảm ơn!
stelterd

@geo tôi nghĩ rằng tôi hiểu những gì bạn nói nhưng không thực sự, nhưng tôi có trường hợp sử dụng tương tự, trong đó tôi thường ở trong gốc dự án của một thư mục git và đưa ra các lệnh từ đó, và sử dụng một lớp lót được cung cấp git log --diff-filter=A -- foo.jskhông in cam kết ID / hàm băm với STDOUT trong thiết bị đầu cuối của tôi chứ tôi phải cung cấp đường dẫn tương đối đến tệp từ gốc git repo để có được kết quả mong muốn
ipatch


1

Những điều sau đây có thể không phải là mối quan tâm của bạn, nhưng tôi nghĩ nó sẽ giúp bạn trong tương lai và là một phần của hệ sinh thái gỡ lỗi trong Git:

Bạn có thể sử dụng git-blameđể hiển thị bản sửa đổi và tác giả đã sửa đổi lần cuối mỗi dòng của một tệp, đặc biệt là chú thích tệp. Truy cập https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

Ví dụ,

git blame -L 174,190  xx.py

Bạn có thể giải thích xin vui lòng mỗi toán hạng làm gì? Tôi nhận ra rằng bạn đã cung cấp một liên kết đến rtfm có liên quan, nhưng một chút làm sáng tỏ sẽ làm cho bài đăng của bạn trở thành một cửa hàng.
rossmcm

Như sách Pro-Git nói Nếu bạn theo dõi một lỗi trong mã của mình và muốn biết khi nào nó được giới thiệu và tại sao, chú thích tệp thường là công cụ tốt nhất của bạn. Nó cho bạn thấy cam kết nào là lần cuối cùng sửa đổi từng dòng của bất kỳ tệp nào, vì vậy ví dụ này tôi đã trình bày sử dụng tùy chọn -L để giới hạn đầu ra ở các dòng từ 174 đến 190 và điều cuối cùng chỉ là tệp mục tiêu bạn muốn kiểm tra ( xx.py) trong trường hợp này là tệp python @rossmcm
Reidel
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.