Gibt es eine Möglichkeit, das nach einem bestimmten Muster gefilterte Git-Diff anzuzeigen?
Etwas wie
git grepdiff pattern
changed file
+++ some sentence with pattern
changed file 2
--- some other pattern
Leider ist die einfachste Lösung nicht gut genug
git diff | grep pattern
+++ some sentence with pattern
--- some other pattern
# not an option as doesn't put the filename close to the match
Ich kam mit einer Problemumgehung mit awk
git diff | awk "/\+\+\+/{f = \$2}; /PATTERN/ {print f \$0} "
Würde aber gerne herausfinden, dass es dafür einen Befehl gibt.
Antworten:
Nicht sicher, aber nicht
git diff -G <regex>
Flagge OK?quelle
git diff -G <regex> --raw
Hast du es versucht
git diff -S<string>
odergit diff -G".*string.*"
? Beachten Sie, dass sie nicht gleichwertig sind. Informationen zur Funktionsweise von -S finden Sie in der Dokumentation zu Spitzhacken .quelle
Eine andere Möglichkeit wäre, das gesamte Diff anzuzeigen und die Ausgabe mit den normalen
less
Befehlen (Typ/
und dann das Muster) zu durchsuchen .Wenn Sie so
less
konfiguriert haben, dass einige Zeilen vor dem Spiel angezeigt werden--jump-target=N
, ist dies sehr nützlich. Versuchen Sie es so:Dies bedeutet, dass die Übereinstimmung in Zeile 10 angezeigt werden sollte (zeigt 9 Kontextzeilen oben), was möglicherweise ausreicht, um auch den Dateinamen anzuzeigen.
Sie können zB auch verwenden
--jump-target=.5
, um die Übereinstimmung in der Mitte des Bildschirms zu positionieren.quelle
Ich benutze
git log -p
, was weniger öffnet (allerdings konfigurierbar), mit dem wiederum gesucht werden kann /. Es gibt auchgit log -S <searchword>
.quelle
Das hat den Job für mich gemacht, ich hoffe es wird jemandem helfen:
quelle
Ich denke, Ihr Ansatz zur "grep"
diff
-Ausgabe ist die beste Problemumgehung.Sie können Ihr awk-Skript verbessern, indem Sie sed verwenden:
colored
: Regex passend zu den farbigen Linien des Terminalsmarker
: Marker zur Übereinstimmung mit der Teilung von verschiedenendiff
Hunks, Linien beginnend mit farbigem "diff"pattern
: zu suchendes Muster, Zeilen, die mit "+" oder "-" beginnen und "MUSTER" enthaltenDadurch werden vollständige Diff-Hunks mit hinzugefügtem oder entferntem MUSTER gedruckt, wobei auch die nützliche Farbausgabe beibehalten wird.
Beachten Sie, dass
^[
incolored
tatsächlich und wörtlich sein sollte^[
. Sie können sie in Bash eingeben, indem Sie Ctrl+ V, Ctrl+ drücken[quelle
^[
wiecolored=$'(\e\[[0-9;]*[a-zA-Z])'
und auf macOS Sie auch müssenbrew install gnu-sed
und ersetzensed --> gsed
Hier ist ein benutzerdefiniertes Diff-Tool, mit dem Sie Änderungen (aber nicht den Kontext) erfassen können:
Verwendung
GIT_EXTERNAL_DIFF="mydiff --grep foo" git diff
Dadurch werden die Zeilen in Ihren Änderungen ausgegeben, die enthalten
foo
(einschließlich Zeilen,foo
die aufgrund Ihrer Änderungen verschwunden sind). Stattdessen kann jedes grep-Muster verwendet werdenfoo
.Jede Ausgabezeile beginnt mit dem folgenden Präfix:
Das Skript kann auch ohne die
--grep
Option verwendet werden. In diesem Fall formatiert es einfach das vollständige Diff (dh das Bereitstellen des vollständigen Kontexts) wie oben beschrieben.mydiff
quelle
Unter Windows ist eine einfache Lösung:
Wenn Sie nach Dateinamen gruppieren möchten, verwenden Sie diese Option
quelle
Ich habe dies mit großer Zufriedenheit benutzt :)
quelle