Wenn Sie alle Commits finden möchten, in denen die Commit-Nachricht ein bestimmtes Wort enthält, verwenden Sie
git log --grep=Wort
Wenn Sie alle Commits finden möchten, in denen "Wort" in den Dateiinhalten hinzugefügt oder entfernt wurde (um genauer zu sein: wo sich die Anzahl der Vorkommen von "Wort" geändert hat), d. h. die Commit-Inhalte suchen, verwenden Sie eine sogenannte 'pickaxe'-Suche mit
git log -SWort
In modernem Git gibt es auch
git log -GWort
um nach Unterschieden zu suchen, deren hinzugefügte oder entfernte Zeile mit "Wort" übereinstimmt (auch Commit-Inhalte).
Ein paar Dinge zu beachten:
-G
akzeptiert standardmäßig ein Regex, während -S
einen String akzeptiert, der jedoch so modifiziert werden kann, dass er Regexe mit der Option --pickaxe-regex
akzeptiert.
-S
findet Commits, in denen sich die Anzahl der Vorkommen von "Wort" geändert hat, während -G
Commits findet, in denen "Wort" im Diff erscheint.
- Dies bedeutet, dass
-S --pickaxe-regex
und -G
nicht genau dasselbe tun.
Das git diff
Handbuch enthält eine schöne Erklärung des Unterschieds:
Um den Unterschied zwischen -S --pickaxe-regex
und -G
zu verdeutlichen, betrachten Sie einen Commit mit dem folgenden Unterschied in derselben Datei:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
Während git log -G"frotz\(nitfol"
diesen Commit anzeigt, zeigt git log -S"frotz\(nitfol" --pickaxe-regex
ihn nicht an (weil sich die Anzahl der Vorkommen dieses Strings nicht geändert hat).
Dies zeigt die Commits mit den Suchbegriffen an, aber wenn Sie die tatsächlichen Änderungen in diesen Commits sehen möchten, können Sie --patch
verwenden:
git log -G"Suchbegriff" --patch
Dies kann dann an grep
weitergeleitet werden, um die Ausgabe nur auf die Anzeige der Commit-Diff-Zeilen mit diesem Suchbegriff zu beschränken. Ein häufiger Anwendungsfall besteht darin, Diff-Zeilen mit diesem Suchbegriff in Commits seit und einschließlich eines bestimmten Commits - in diesem Beispiel 3b5ab0f2a1
- anzuzeigen:
git log 3b5ab0f2a1^.. -G"Suchbegriff" --patch | grep Suchbegriff
0 Stimmen
Mögliche Duplikat von Wie greife ich auf (suche) den committeten Code im Git-Verlauf?