Git erweitert

In diesem Artikel befasse ich mich noch ein wenig mit git diff und git stash. Dies sind zwei Funktionen die den Workflow mit der Versionsverwaltung Git noch etwas angenehmer machen. Gleich vorweg: Die Installation von GitLens für VS-Code macht die Sache wesentlich einfacher. Wer ein Standalone Produkt sucht kann GitKraken (vom selben Hersteller) als Git-GUI Tool verwenden.

Versionsvergleich

git diff

vergleicht. Vergleichen kann ich commits, branches, Dateien, das aktuelle working directory und noch mehr, und wird in Zusammenhang mit git log und git status verwendet. Ohne einem Zusatz wird mit allem verglichen, was sich nicht in der Staging Area befindet.

git diff HEAD

vergleicht mit dem letzten HEAD-Pointer. Also in der Regel mit dem letzten Commit.

git diff --staged

vergleicht ergänzend die Staging Area mit dem letzten Commit. Den Dateinamen hinten angefügt vergleicht – eh klar – nur die angegebene Datei.

Branches und Commits werden mit zwei Punkten (Dots) ohne Leerzeichen verglichen.

git diff branch1..branch2 filename.txt
git diff commit1..commit2 filename1.txt filename2.txt

Mit stash arbeiten

git stash kommt als Zusatz zuhilfe, wenn ich in einen anderen branch wechsle aber meine Änderungen (noch) nicht committen oder stagen möchte. Ein Subsystem quasi, weil beim Branchwechsel die Änderungen in den gewechselten branch „mitgenommen“ werden, oder ich einen Konflikt gemeldet bekomme.

git stash

schiebt alles was unstaged und staged ist auf das Abstellgleis, und ich kann es mir mit

git stash pop

einfach wieder hereinholen. Wobei git pop das Abstellgleis leer und

git stash apply

das Abstellgleis befüllt lässt. Ich kann es mir dann zu jederzeit wieder holen, wann und wo ich des brauche – natürlich auch in anderen branches. Dabei hat stash eine Menge Optionen die hier nur der Übersicht halber dargestellt werden.

git stash -ustasht auch die untracked files
git stash listlistet alle stashes auf
git stash apply stash@{2}applies den stash an Position 2
git stash drop stash@{3]schmeißt den stash 3 weg
git stash clearlöscht alles im stash