2012-07-18 11 views
126

Giả sử tôi có một tệp foo.js đã được cam kết một thời gian trước đây. Tôi muốn chỉ cần tìm thư cam kết nơi tệp này được thêm lần đầu tiên.Tìm commit nơi tệp đã được thêm

Sau khi đọc câu trả lời và mày mò của riêng tôi, việc này đối với tôi

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

Dang, anh trai. Bạn có một danh tiếng của 1 và rất nhiều thứ tốt trên hồ sơ của bạn. Bạn phải làm một số trolling để có được downvotes một nơi nào đó. –

+0

Tài khoản của anh ta "tạm thời" bị đình chỉ ... nhiều năm, có vẻ như vậy. – msanford

Trả lời

203

Dưới đây là đơn giản hơn, "git tinh khiết" cách để làm điều đó, không có đường ống dẫn cần thiết:

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.

Tôi có bí danh tiện dụng vì điều này luôn luôn quên nó:

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

này làm cho nó đơn giản như:

git whatadded -- foo.js 
+17

+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ị vào trước 'git log --diff-filter = A - * thư mục con/foo.js' – Geo

+2

Cách này hoạt động trên các tệp được hợp nhất từ các chi nhánh khác, nhưng không nhất thiết phải thêm vào chi nhánh đang được sáp nhập bởi người dùng thực hiện hợp nhất? – g33kz0r

13
git log --oneline -- foo.js | tail -n 1 
+1

Tôi rất vui khi có '--follow'. –

0

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

Bạn có thể sử dụng git-đổ lỗi cho hiển thị những gì phiên bản và tác giả sửa đổi lần cuối mỗi dòng của một file especifiqly tập tin chú thích, Thăm https://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

cũ. git blame -L 174,190 xx.py

+0

Bạn có thể giải thích điều mà mỗi toán hạng làm được không? Tôi nhận thấy 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 duy nhất. – rossmcm

+0

Khi sách Pro-Git nói Nếu bạn theo dõi một lỗi trong mã của bạn 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 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 đã sử dụng tùy chọn -L để giới hạn đầu ra cho các dòng từ 174 đến 190 và điều cuối cùng chỉ là tệp đích bạn muốn kiểm tra (xx.py) trong trường hợp này là tệp python @rossmcm – Reidel