2012-12-14 40 views
10

Tôi có một đoạn mã khác với nhánh hiện tại của tôi trong repo git, và tôi không chắc chắn commit nào và nhánh nào. Làm thế nào tôi có thể tìm kiếm trong tất cả các tệp mà tôi đã cam kết cho đến bây giờ cho một chuỗi cụ thể (và sau đó hiển thị xung quanh dòng mã đó)?Git-Repo tìm kiếm chuỗi trong tất cả các tệp đã cam kết (chi nhánh chưa biết và cam kết)

+0

có thể trùng lặp: http://stackoverflow.com/questions/ 746684/cach-to-search-through-all-cam kết-trong-kho-lưu trữ –

Trả lời

11

Sử dụng git grep để xác định vị trí cam kết:

git grep "string" $(git rev-list --all) 

Các git rev-list --all làm cho nó tìm kiếm toàn bộ lịch sử của dự án.

Điều đó sẽ đưa ra một sản lượng như thế này:

<commit>:<path>:<matched line> 

Sau đó, bạn có thể sử dụng git branch --contains để tìm ra các chi nhánh cam kết là:

git branch --contains <commit> 
+0

Tôi có thể chỉ định để tìm kiếm trong chỉ một tệp/đường dẫn không? (Ví dụ: Tôi đang tìm kiếm một vật cố định cụ thể và chỉ muốn tìm kiếm trong đường dẫn này) –

+1

Có: 'git grep" string "$ (git rev-list --all) - đường dẫn'. – jszakmeister

+7

điều này không hoạt động cho lịch sử lớn: ( 'git grep 'abc' echo $ (git rev-list --all)' 'zsh: danh sách đối số quá dài: git' – tback

1

thay đổi chi nhánh bằng git branch "branch-name" và sau đó thực hiện git grep "specific string" trong thư mục gốc của kho lưu trữ. nếu bạn không có quá nhiều nhánh, điều này sẽ giúp bạn có đủ nhanh.

1

Nếu git grep "string" biến trên được đem lại cho bạn " danh sách quá dài "lỗi, bạn có thể sử dụng git log -S để thay thế. Các tùy chọn -S tìm kiếm các nội dung của các tập tin đã được cam kết: (. Khác ở các "Pro Git" cuốn sách dưới "searching")

git log -Sstring # look for string in every file of every commit 
git log -Sstring -- path/to/file # only look at the history of the named file 

Các vấn đề liên quan