Nếu bạn muốn tìm tất cả các xác nhận trong đó thông điệp cam kết chứa từ đã cho, hãy sử dụng
$ git log --grep=word
Nếu bạn muốn tìm tất cả các xác nhận trong đó "từ" đã được thêm hoặc xóa trong nội dung tệp (chính xác hơn: nơi số lần xuất hiện của "từ" đã thay đổi), tức là tìm kiếm nội dung cam kết , hãy sử dụng tìm kiếm 'pickaxe' với
$ git log -Sword
Trong git hiện đại cũng có
$ git log -Gword
để tìm sự khác biệt có dòng được thêm hoặc xóa khớp với "từ" (cũng cam kết nội dung ).
Lưu ý rằng -G
theo mặc định chấp nhận một biểu thức chính quy, trong khi -S
chấp nhận một chuỗi, nhưng có thể được sửa đổi để chấp nhận các biểu thức chính bằng cách sử dụng --pickaxe-regex
.
Để minh họa sự khác biệt giữa -S<regex> --pickaxe-regex
và -G<regex>
, hãy xem xét một cam kết với khác biệt sau trong cùng một tệp:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Trong khi git log -G"regexec\(regexp"
sẽ hiển thị cam kết này, git log -S"regexec\(regexp" --pickaxe-regex
sẽ không (vì số lần xuất hiện của chuỗi đó không thay đổi).
Với Git 2.25.1 (tháng 2 năm 2020), tài liệu được làm rõ xung quanh các biểu thức đó.
Xem cam kết 9299f84 (06 tháng 2 năm 2020) của Martin gren (``) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 0d11410 , ngày 12 tháng 2 năm 2020)
diff-options.txt
: tránh quá tải "regex" trong ví dụ
Báo cáo bởi: Adam Dinwoodie
Đã đăng ký: Martin gren
Được đánh giá bởi: Taylor Blau
Khi chúng tôi minh họa sự khác biệt giữa -G
và -S
(sử dụng --pickaxe-regex
), chúng tôi sẽ sử dụng một ví dụ khác và git diff
gọi liên quan đến "regexec", "regrec", "regmatch", ...
Ví dụ này là chính xác, nhưng chúng ta có thể làm cho việc gỡ rối dễ dàng hơn bằng cách tránh viết "regex. *" Trừ khi thực sự cần thiết để đưa ra quan điểm của chúng tôi.
Thay vào đó, hãy sử dụng một số từ trang điểm, không gây khó chịu.
Các git diff
tài liệu hiện bao gồm:
Để minh họa sự khác biệt giữa -S<regex> --pickaxe-regex
và
-G<regex>
, hãy xem xét một cam kết với khác biệt sau trong cùng một tệp:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Trong khi git log -G"frotz\(nitfol"
sẽ hiển thị cam kết này, git log
-S"frotz\(nitfol" --pickaxe-regex
sẽ không (vì số lần xuất hiện của chuỗi đó không thay đổi).