So durchsuchen Sie die letzten Git-Commit-Änderungen

0
214

Nachverfolgen, wann und wo Codezeilen zu Ihrer Codebasis hinzugefügt wurden Kopfschmerzen, aber Git speichert alle Changelogs und hat einige Tools zum Durchsuchen von Commit-Diffs. Sie können sie verwenden, um Zeilen zu finden, die einer bestimmten Suchzeichenfolge entsprechen.

Verwenden von Git Log

Leider bieten Websites wie GitHub diese Funktion nicht an, daher müssen Sie git log verwenden. Dieser Befehl hat viele Parameter, einschließlich der Möglichkeit, Commit-Diffs zu durchsuchen, aber der Umgang mit der Ausgabe ist etwas umständlich.

Auf jeden Fall ist die interaktive Pager-Anzeige von Git ziemlich klobig für viele Leute, daher empfehlen wir, entweder in der Befehlsleiste mit /Search zu suchen oder die Ausgabe mit | . direkt an die Konsole zu leiten cat oder in eine Datei mit > log.txt, wo es effektiver durchsucht werden kann.

Das Ausführen dieser Art von Suche für ein ganzes Repository wird wahrscheinlich eine sehr große Ausgabe erzeugen. Sie möchten wahrscheinlich Commits in einem bestimmten Zeitraum anzeigen, was Sie mit –after und –before tun können, die sowohl Datumsangaben als auch relative Datumsangaben wie “2 Woche” und “3 Monate.” Der folgende Befehl ignoriert Commits, die älter als eineinhalb Monate sind, und ignoriert auch sehr aktuelle Commits.

git log –after=”6 week” –before=”1 week”

Wenn Sie einfach nur wissen möchten, welche Commits eine bestimmte Suchzeichenfolge enthalten, können Sie -S verwenden, was erfordert, dass Sie die Suchzeichenfolge ohne Leerzeichen direkt danach einfügen.

git log –after=”6 week” – S'Dictionary' –stat

Werbung

Wenn Sie&#8217 ;möchten Sie die Dateien mit dieser Ausgabe anzeigen, können Sie das -p Flag verwenden:

git log –after=”6 week” -S'Dictionary' –stat -p | Katze

Diese Ausgabe ist jedoch für jede große Abfrage massiv und unterscheidet sich nicht wesentlich davon, sie einfach in Ihrer IDE zu öffnen. Um dies zu lösen, müssen wir grep und sed verwenden, was bedeutet, dass die Befehle leider kompliziert werden.

Sed for Smarter verwenden Abgleich

Um die tatsächlichen Zeilen in der Datei abzugleichen und zu drucken, müssen Sie grep verwenden und die Ausgabe dorthin leiten, um die Zeilen zu drucken, auf denen das Muster gefunden wurde. Dazu müssen Sie das Muster zweimal eingeben:

git log –after=”6 week” -S'Dictionary' –stat -p | grep 'Wörterbuch'

Dies hat jedoch das Problem, dass die Commit-Nachrichten oder IDs nicht mehr enthalten sind. Um dies zu beheben, müssen wir sed ausbrechen:

SEARCH=Wörterbuch && git log –after=”6 week” -S$SEARCH –stat -p | sed -n “/commit/,/diff/p; /$SEARCH/p”

Dieser Befehl setzt eine SEARCH-Variable, da das zweimalige Eingeben des Suchbegriffs umständlich ist. Es führt git log –stat -p aus, das die vollständige Ausgabe ausgibt, aber zum Parsen an sed übergeben wird. sed entspricht allen Zeilen zwischen “commit” und “diff,” die die Ausgabe des –stat-Headers abruft. Dann hängt es die übereinstimmende Zeile an und erzeugt eine tatsächlich nutzbare Ausgabe.

Vielleicht stattdessen Git Blame verwenden

Die obigen Beispiele funktionieren gut zum Durchsuchen einer gesamten Codebasis. Wenn Sie jedoch wissen, welche Datei betroffen ist, und stattdessen nur den Verlauf davon verstehen möchten, sollten Sie gitblame verwenden.

Werbung

Git-blame druckt die gesamte Datei aus, aber jede Zeile mit der Person versehen, die sie zuletzt geändert hat. Auf diese Weise können Sie Änderungen schnell aufspüren und in vielen Fällen Ihre Kollegen dafür verantwortlich machen.

Sie können den Befehl gitblad verwenden, aber GitHub hat eine großartige GUI dafür, die durch Klicken auf verfügbar ist Datei und drücken Sie “Blame.”

Beachten Sie, dass Sie auch den chronologischen Verlauf der Datei über dieselbe Benutzeroberfläche anzeigen können. Git Tadel verdichtet alles zu einer einzigen Ausgabe.