19. September 2021

| Timm Rose

11 fortgeschrittene Git Befehle

19. September 2021

| Timm Rose

11 fortgeschrittene Git Befehle

Fortgeschrittene Git Befehle

11 Fortgeschrittene Git Befehle ist eine Übersicht über Techniken und best practices mit der Versionsverwaltung Git für Webentwickler.

Wer sich vorerst mit den Git Grundlagen beschäftigen möchte, kann den Beitrag Git Grundlagen und die 14 wichtigsten Befehle nutzen.

Schnelleinstieg

$ git config --global alias.diffs 'diff --staged'

Alias zu einem bestimmten Befehl (hier diff –staged) anlegen

$ git restore js/

Änderungen z.B. aus einem bestimmten Verzeichnis (hier js/) rückgängig machen

$ git blame -M -C header.js

Die Herkunft von Codeabschnitten genau bestimmen

$ git branch feature-25 37h6fa72e

Neuen Branch von einem bestimmten Commit abzweigen

$ git cherry-pick 91f7he82d

Änderungen aus einzelnem Commit gezielt übernehmen

$ git fetch origin feature-05 master

Branches feature-05 und master vom Repository origin holen

$ git reflog

Auflistung des Verlaufs aller Head-Stände

$ git log --oneline --first-parent | tail -1

Zeigt einzeilig den ersten Commit eines Branches

$ git tag -a release-1.4 -m "Release-1.4"

Einen Tag eines Release-Commits anlegen

$ git archive HEAD --format=zip > archive.zip

Ein Zip-Archiv eines bestimmten Commits erstellen

git branch -m master main  
git fetch origin
git branch -u origin/main main

Den master Branch umbenennen in main

Kann man aus Git noch mehr herausholen?

Die Möglichkeiten von Git sind sehr vielfältig. Man kann Git im professionellen Einsatz mit den empfohlenen Workflows einsetzen, ohne fortgeschrittene Git Befehle anwenden zu müssen.

Allerdings sind hierbei immer die Fragen, was möchte man erreichen und welchen Vorteil kann man für sein Arbeitsumfeld aus den zusätzlichen Möglichkeiten fortgeschrittener Techniken ziehen.

Diese Fragen kann nur jeder selbst für sich beantworten, ich kann mit einer Übersicht der meiner Erfahrung nach wichtigsten fortgeschrittenen Git Befehle dabei helfen, Git vielleicht noch effizienter zu nutzen.

11 Fortgeschrittene Git Befehle ausführlich erklärt

Alias anlegen

Sehr hilfreich ist das Anlegen von einem Alias zu einem bestimmten Befehl. So kannst du z.B. folgende Konfiguration verwenden, um git diff mit der Option –staged auszuführen

$ git config --global alias.diffs 'diff --staged'

Zukünftig gibst du also nur noch

$ git diffs

ein, um dir die zum Commit vorgemerkten Änderungen des Staging-Bereichs anzeigen zu lassen.

Möchtest du deine aktuelle Konfiguration einsehen, verwendest du

$ git config --list

und es werden nicht nur aktuelle Aliasse, sondern konfigurierter Username, Email, Branches und einiges mehr, angezeigt.

Restore

Mit dem Restore-Befehl lassen sich Änderungen wieder rückgängig machen. Mit folgendem Befehl die aktuellen Änderungen des Arbeitsbereiches, z.B. aus dem Ordner js/

$ git restore js/

und mit folgendem Restore-Befehl die bereits dem Stage-Bereich hinzugefügten Änderungen, die damit wieder in den Arbeitsbereich zurückgesetzt werden

$ git restore --staged js/

Blame

Den Blame-Befehl kannst du für die Herkunft von Codeabschnitten verwenden, wenn es sich um verschieben und kopieren von Abschnitten aus anderen Dateien handelt.

So wird mit

$ git blame -M -C header.js

zeilenweise angezeigt, wann und durch wen die Änderung erfolgte.

Commit/Branch abzweigen

Das Abzweigen von neuen Branches kannst du vom Master Branch aus machen.

Willst du ab einem bestimmten Commit oder Branch abzweigen, gibst du den neuen Branch-Namen und die Commit-ID an

$ git branch feature-25 37h6fa72e

und hast damit den Branch „feature-25“ auf Grundlage des Commits „37h6fa72e“ erstellt.

Für das Abzweigen eines bestehenden Branches gibst du lediglich den neuen vom abzuzweigenden Branch an

$ git branch feature-25 feature-05

Cherry-pick

Mit dem cherry-pick Befehl lassen sich Änderungen aus einem bestimmten Commit in eine andere Version oder Branch übernehmen.

Zum Beispiel nutzt man den Befehl, um kleinere Änderungen aus einem Feature-Branch zu übertragen, um diesen danach löschen zu können.

Mit

$ git cherry-pick 91f7he82d

kannst du also den Stand des Commits „91f7he82d“ in deinen aktuellen Branch übernehmen.

Fetch

Eine der wichtigsten Git Befehle ist der Fetch-Befehl, der eigentlich nicht zu den fortgeschrittenen Befehlen gehört, sondern auch gerne im normalen Arbeitsablauf verwendet wird. Das hängt immer von den Situationen bzw. den Workflows der Entwickler ab.

Willst du ausgewählte Branches aus einem ausgewählten Repository ziehen, kannst du mit

$ git fetch origin feature-05 master

z.B. die Branches feature-05 und master aus dem Repository origin holen. Und ohne Parameter, also mit

$ git fetch

würdest du per Default-Auswahl alle Branches aus dem Repository origin holen.

Der Unterschied zum Pull-Befehl ist übrigens, dass beim fetch der Merge-Befehl nicht automatisch mit ausgeführt wurde.

Reflog

Möchte man alle Änderungen an Branches und deren Head sehen, listet

$ git reflog

den Verlauf für jeden Head-Stand auf. Dies ist besonders wichtig, wenn du gezielt Änderungen aus einem vorherigen Head-Stand einsehen und eventuell herstellen willst.

Log

Der Log-Befehl bietet diverse Optionen, hiermit kannst du den ersten Commit eines Branches anzeigen lassen, in der Regel also den initial commit.

$ git log --oneline --first-parent | tail -1

Der Parameter –oneline zeigt die Log-Ausgabe in einer Zeile und –first-parent steht, wie der Name sagt, für das erste Parent-Commit.

Mit tail -1 wird lediglich die letzte Zeile der Log-Ausgabe angezeigt.

Eine Möglichkeit zur Suche innerhalb der Log-Ausgabe ist der schon von Linux bekannte grep-Befehl. So kannst du mit

$ git log --grep="release"

die Log-Ausgabe nach der Zeichenkette „release“ durchsuchen.

Tagging

$ git tag -a release-1.4 -m "Release-1.4"

Für einen Commit ein Release-Tag zu vergeben, kann in einigen Projekt-Workflows durchaus zur zusätzlichen standardisierten Markierung gehören.

Mit der Parameter -a erstellt man ein mit Anmerkungen versehenes Tag und -m sorgt wie bei einem Commit für die Option der Eingabe einer Nachricht.

Willst du nachträglich ein Release taggen, kannst du das mit

$ git tag 3.5.1 91f7he82d

unter Angabe des Tag 3.5.1 und der Commit-ID, die du mit git log herausfinden kannst.

Archive

$ git archive HEAD --format=zip > archive.zip

Mit dem Archive-Befehl kannst du ein Archiv erstellen. In dem vorgestellten Befehl wird das Archiv mit den Daten des ausgewählten Commits exportiert.

Man kann auch die Daten aus einem Branch exportieren. Mit dem Befehl

$ git archive --output=05-feature.zip --prefix=2.5.6 05-feature

wird ein Archiv erstellt, das durch den –output-Prameter unter dem Namen 05-feature.zip exportiert wird. Mit -prefix wird der Präfix 2.5.6 jedem Dateinamen vorangestellt und die Angabe des letzten Parameters wählt den Branch, in diesem Fall 05-feature.

Möchtest du im tar-Format exportieren, ersetzt du in den beiden oben gezeigten Beispielen jeweils zip durch tar.

Umbenennen

Mit den folgenden drei Befehlen kann ein Branch umbenannt werden. Das ist besonders hilfreich wenn, wie aktuell, Empfehlungen zu Namens-Konventionen des lokalen Haupt-Branches master zur Umbenennung in main angepasst werden.

git branch -m master main  

Den master in main umbenennen

$ git push -u origin main

Den umbenannten Branch pushen

Nun den Default Branch im Repository Host (Gitlab/Github/Bitbucket …) auf main setzen.

Beispielsweise für Gitlab:

-> Repository -> Branches -> Project settings -> Default branch -> „main“ auswählen -> Save changes

$ git push origin --delete master

Master Branch löschen

Ist das nicht möglich, dann muss der Branch über den Gitlab/Github/Bitbucket-Client gelöscht werden.

Digitale Rundschau Logo

© 2021 Digitale Rundschau | Impressum