2012-06-17 38 views
18

Tôi đang cố gắng tìm kiếm các thay đổi trong lịch sử git của mình liên quan đến một tên biến rất cụ thể.Git tìm kiếm tất cả các khác biệt

Tôi đã cố gắng làm điều này:

git diff HEAD~25000 | grep -in mydistinctvariablename 

Kết quả không cho tôi biết đó cam kết các dòng kết quả là từ và phải mất khá nhiều thời gian (khoảng 5-7 phút).

Có ai có giải pháp, thời gian và kết quả tốt hơn không?

+2

bản sao có thể có của [Cách grep (tìm kiếm) lịch sử git?] (Http://stackoverflow.com/questions/2928584/how-to-grep-search-the-git-history) –

+0

Hmm không có trong số đó lệnh cho tôi biết sửa đổi kết quả tìm kiếm đến từ đâu, chỉ có tệp mà thay đổi đã xảy ra trong –

+0

Đối với tôi, đó là SHA trước tên tệp trong kết quả. Tôi đã sử dụng lệnh đầu tiên trong câu trả lời đầu tiên. [Câu trả lời thứ hai] (http://stackoverflow.com/a/2928721/211563) có lẽ nhiều hơn những gì bạn đang tìm kiếm mặc dù, và đó cũng cung cấp cho SHA (cung cấp định dạng đăng nhập của bạn cho thấy nó). –

Trả lời

27

git log thường là lệnh để sử dụng khi kiểm tra lịch sử cam kết. git log --grep có thể được sử dụng để tìm kiếm cụm từ thông dụng trong thông báo cam kết.

gì bạn đang sau là git log -S những tìm kiếm các nội dung cam kết đơn giản hoặc git log -G những tìm kiếm nó với một biểu thức chính quy:

-S Hãy tìm sự khác biệt mà giới thiệu hoặc loại bỏ đối tượng của. Lưu ý rằng điều này khác với chuỗi đơn giản xuất hiện trong đầu ra diff; xem mục nhập cuốc trong gitdiffcore (7) để biết thêm chi tiết.

Vì vậy, ví dụ, trong kho MSysGit tôi có thể tìm thấy những cam kết rằng giới thiệu Tcl 8.5.8 bằng cách sử dụng:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8" 
d938476 Make `NO_SFX=1 portable-release.sh` work 
ef1dc94 Update tk to version 8.5.8 
a910049 Update tcl to version 8.5.8 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

mà chỉ nhìn cho 8.5.8 trong các thông điệp cam kết hoặc như bạn muốn làm nhìn vào một chuỗi mà chỉ xảy ra trong diff cam kết:

C:\src\msysgit\src>git log --oneline -S"version=8.5.8" 
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9 
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list 

phạm vi giới hạn mà bạn có trong mẫu của bạn vẫn có thể được sử dụng ở đây để hạn chế các cam kết để được kiểm tra. Đọc qua hướng dẫn đăng nhập git cẩn thận để có được ý tưởng hay về tất cả những gì nó có thể làm.

Lưu ý rằng -S chỉ trông cho khác biệt chuỗi đơn giản - nếu bạn thực sự muốn tìm kiếm các nội dung sử dụng một biểu thức chính quy tương tự như bạn ví dụ thì bạn nên sử dụng -G tùy chọn thay vì -S nhưng điều này sẽ chậm hơn đáng kể.

+0

Nếu tôi có thể, trong đoạn đầu tiên, dòng 'd938476 Tạo \ 'NO_SFX = 1 portable-release.sh \' work' gây nhầm lẫn, như gợi ý rằng đoạn đầu tiên là đoạn thứ hai (nói cách khác, tôi nghĩ rằng sẽ rõ ràng hơn nếu dòng đó bị xóa khỏi đầu ra mẫu ...) – acdcjunior

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