Nützliche Tipps für die Kommandozeilen-Interaktion mit git

Fr, 14. Mai 2021, Marco

Im nachfolgenden Artikel möchte ich einige kurze Tipps zum Versionsverwaltungstool git aufzeigen, welche ich im Alltag ziemlich nützlich finde. Die nachfolgenden Tipps habe ich ausschliesslich in der Kommandozeile geprüft und nicht in einer grafischen Oberfläche.

Rekursive Statusabfrage

Gerade bei gewissen Softwareprojekten kann es vorkommen, dass es unzählige Sachen gibt, welche nicht in ein Git-Repository gehören. Bei Python zum Beispiel die Dateien im venv-Ordner. Bei node.js ist es unter anderem das Verzeichnis node_modules. Mit dem nachfolgenden Befehl können alle Dateien, welche noch nicht in der Staging-Area sind, angezeigt werden:

 git status -uall

Wer es etwas kürzer möchte, kann auch einfach -u als Option mitgeben, da all die Default-Einstellung ist. Ich habe das letztens gebraucht als ich ein Projekt ziemlich umgestaltet hatte und danach nicht sicher war, ob die einzelnen Ordner noch von der .gitignore-Datei ausgenommen waren.

Interaktives Hinzufügen von Änderungen

Bei der Arbeit mit git ist es sinnvoll, dass die einzelnen Commits klein sind und nur zusammengehörende Sachen mit einer Commit-Nachricht versehen werden. Dies dient anderen und euch, sodass ihr die Änderungen auch später noch nachvollziehen könnt. Nach einem Arbeitstag oder generell einer längeren Entwicklungsphase kann es schnell vorkommen, dass unterschiedliche Sachen bearbeitet wurden. Damit nur diejenigen Änderungen in einen Commit einfliessen, welche etwas gemeinsam haben, ist die Option -p beim Hinzufügen von Dateien in die Staging-Area sehr nützlich. Diese Option geht zunächst in den interaktiven Modus, also git add --interactive, und geht danach gleich zu der Patch-Option über. Durch die Eingabe des folgenden Befehls lassen sich nun einzelne Teile des Quelltextes Hinzufügen:

git add -p

In diesem Modus werden bereits gewisse Snippets vorgeschlagen, welche als Änderung hinzugefügt werden können. Falls die vorgeschlagenen Codestücke zu wenig aufgetrennt sind, können diese noch weiter aufgetrennt werden. Falls man sich nicht sicher ist, welche Abkürzungen was genau mit dem ausgewählten Code machen, kann die Option ? verwendet werden, welche die Abkürzungen kurz beschreibt.

Commits wortweise vergleichen

Manchmal kommt es vor, dass man den Unterschied zwischen zwei Commits nicht so richtig sieht, obwohl die Zeilen farblich hervorgehoben werden. Hierfür ist die Option --word-diff nützlich. Mit dem folgenden Befehl kann die Differenz zwischen zwei Commits einfach auf Wortbasis angezeigt werden:

git diff --word-diff commit1 commit2

In der oberen Abbildung werden zuerst zwei Commits normal verglichen. Wie man sieht, können die Unterschiede nicht sofort erkannt werden. Der untere Teil des Screenshots zeigt die Verwendung der Option --word-diff. Ausserdem kann der Befehl git diff auch verwendet werden, wenn zwei unterschiedliche Dateien (unabhängig, ob diese in einem Repository drin sind) verglichen werden müssen. So konnte ich letztens relativ einfach zwei Logdateien damit vergleichen.

Alias für eine übersichtlichere Ausgabe der Commit-History

Die meisten kennen wahrscheinlich die grafische Darstellung der Commit-History, welche es in den Webfrontends wie Gitea, Gitlab und GitHub gibt. In der Kommandozeile lässt sich etwas Ähnliches bewerkstelligen. Git bietet die Möglichkeit eigene Aliase zu definieren. Hierfür muss der nachfolgende Befehl in der Kommandozeilen eingegeben werden:

git config alias.tree  "log --decorate --pretty=oneline --abbrev-commit --graph"

Im nachfolgenden Bild ist ein kleines Beispiel ersichtlich. Hier kann man erkennen, dass es einen neuen Branch gab, welcher dann wieder gemerged wurde. Bei so kleinen Projekten ist das natürlich nicht so spannend als bei grösseren Projekten, welche mit mehr Branches arbeiten, dennoch sollte das Prinzip davon klar sein.

Wenn ihr den oberen Befehl ausführt, solltet ihr in der projektspezifischen Konfigurationsdatei den folgenden Eintrag haben:

[alias] 
        tree = log --decorate --pretty=oneline --abbrev-commit --graph

Über die Option --global könnt ihr den Alias für sämtliche Git-Projekte definieren. Natürlich könnt ihr auch direkt die Datei ~/.gitconfig bearbeiten, wodurch dieser Alias dann für diesen Benutzer zur Verfügung steht.