Wenn Sie alle Commits suchen möchten, bei denen die Commit-Nachricht ein bestimmtes Wort enthält, verwenden Sie
$ git log --grep=word
Wenn Sie alle Commits finden möchten, bei denen "Wort" im Dateiinhalt hinzugefügt oder entfernt wurde (genauer gesagt: wo sich die Anzahl der Vorkommen von "Wort" geändert hat), dh den Commit-Inhalt durchsuchen , verwenden Sie die sogenannte "Spitzhacke" -Suche mit
$ git log -Sword
Im modernen Git gibt es auch
$ git log -Gword
um nach Unterschieden zu suchen, deren hinzugefügte oder entfernte Zeile mit "Wort" übereinstimmt (auch Inhalte festschreiben ).
Beachten Sie, dass -G
standardmäßig eine Regex akzeptiert wird, während -S
eine Zeichenfolge akzeptiert wird. Sie kann jedoch geändert werden, um Regexe mit der zu akzeptieren --pickaxe-regex
.
Um den Unterschied zwischen -S<regex> --pickaxe-regex
und zu veranschaulichen -G<regex>
, betrachten Sie ein Commit mit dem folgenden Unterschied in derselben Datei:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
While git log -G"regexec\(regexp"
zeigt dieses Commit an, git log -S"regexec\(regexp" --pickaxe-regex
wird es jedoch nicht (da sich die Anzahl der Vorkommen dieser Zeichenfolge nicht geändert hat).
Mit Git 2.25.1 (Februar 2020) wird die Dokumentation zu diesen regulären Ausdrücken geklärt.
Siehe Commit 9299f84 (06. Februar 2020) von Martin Ågren (``) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 0d11410 , 12. Februar 2020)
diff-options.txt
: Vermeiden Sie im Beispiel "Regex" -Überlastung
Berichtet von: Adam Dinwoodie
Unterzeichnet von: Martin Ågren
Bewertet von: Taylor Blau
Wenn wir den Unterschied zwischen -G
und -S
(using --pickaxe-regex
) veranschaulichen , verwenden wir dazu ein Beispiel diff undgit diff
Aufruf mit "regexec", "regexp", "regmatch", ...
Das Beispiel ist richtig, aber wir können das Entwirren erleichtern, indem wir vermeiden, "Regex. *" Zu schreiben, es sei denn, es ist wirklich notwendig, um unseren Standpunkt zu verdeutlichen.
Verwenden Sie stattdessen einige erfundene, nicht reguläre Wörter.
Die git diff
Dokumentation enthält jetzt:
Um den Unterschied zwischen -S<regex> --pickaxe-regex
und
zu veranschaulichen -G<regex>
, betrachten Sie ein Commit mit dem folgenden Unterschied in derselben Datei:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
While git log -G"frotz\(nitfol"
zeigt dieses Commit an, git log
-S"frotz\(nitfol" --pickaxe-regex
wird es jedoch nicht (da sich die Anzahl der Vorkommen dieser Zeichenfolge nicht geändert hat).