In einem Git-Code-Repository möchte ich alle Commits auflisten, die ein bestimmtes Wort enthalten. Ich habe es versucht
git log -p | grep --context=4 "word"
Aber es gibt mir nicht unbedingt den Dateinamen zurück (es sei denn, es ist weniger als 5 Zeilen von dem Wort entfernt, nach dem ich gesucht habe. Ich habe es auch versucht
git grep "word"
aber es gibt mir nur aktuelle Dateien und nicht die Geschichte.
Wie durchsuche ich den gesamten Verlauf, um Änderungen an einem bestimmten Wort zu verfolgen? Ich beabsichtige, meine Codebasis nach Vorkommen von Wörtern zu durchsuchen, um Änderungen aufzuspüren (Suche im Dateiverlauf).
Antworten:
Wenn Sie alle Commits suchen möchten, bei denen die Commit-Nachricht ein bestimmtes Wort enthält, verwenden Sie
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
Im modernen Git gibt es auch
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
.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)Die
git diff
Dokumentation enthält jetzt:quelle
-S<string>
Suchen Sie nach Unterschieden, die eine Instanz von <string> einführen oder entfernen.-G<string>
Suchen Sie nach Unterschieden, deren hinzugefügte oder entfernte Zeile mit dem angegebenen <regex> übereinstimmt.-S<string>
schneller ist, da nur geprüft wird, ob die Anzahl der Vorkommen<string>
geändert wurde, während-G<string>
in jedem Commit-Diff eine Zeile hinzugefügt und entfernt wird.git log --grep="my words"
.--grep
unterscheidet sich von-S
und-G
. Sie können die Zeichenfolge zu jedem dieser Argumente zitieren.git log
Die Spitzhacke findet Commits mit Änderungen, einschließlich "Wort" mitgit log -Sword
quelle
Nach vielen Experimenten kann ich Folgendes empfehlen, das Commits zeigt, die Zeilen mit einem bestimmten regulären Ausdruck einführen oder entfernen, und die Textänderungen in jedem anzeigt, wobei die Farben die hinzugefügten und entfernten Wörter anzeigen.
Es dauert eine Weile, bis ich renne ... ;-)
quelle
GIT_PAGER=cat
| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Sie können den folgenden Befehl versuchen:
oder
grep
auf folgende Weise verwenden:Führen Sie diesen Befehl in dem übergeordneten Verzeichnis aus, in dem Sie suchen möchten.
quelle
git log --patch --color=always | less +/searching_string
.Eine weitere Möglichkeit / Syntax dazu ist: So
git log -S "word"
können Sie beispielsweise suchen
git log -S "with whitespaces and stuff @/#ü !"
quelle
vim-fugitive ist vielseitig für diese Art der Prüfung in Vim.
Verwenden Sie
:Ggrep
dazu. Für weitere Informationen können Sie vim-fugitive installieren und das Turorial von nachschlagen:help Grep
. Und diese Episode: Das Erkunden der Geschichte eines Git-Repositorys wird Sie dazu führen, all das zu tun.quelle
So verwenden Sie den booleschen Konnektor für reguläre Ausdrücke:
Diese Suche nach regulären Ausdrücken sucht nach regulären Ausdrücken [0-9] * oder [az] * für Festschreibungsnachrichten.
quelle
Wenn Sie nach vertraulichen Daten suchen möchten, um sie aus Ihrem Git-Verlauf zu entfernen (weshalb ich hier gelandet bin), gibt es dafür Tools. Github als spezielle Hilfeseite für dieses Problem .
Hier ist der Kern des Artikels:
quelle