🐙 Git und GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Veröffentlichungsdatum

31. August 2025

Grundlegende und erweiterte Git-Befehle für Versionskontrolle, Branching, Remote-Repos, Stash, Tags und GitHub CLI.

🔹 Grundlegende Befehle

Befehl

Beispiel

Beschreibung

git add Eine Datei zum Staging-Bereich hinzufügen
git add file.txt

Eine bestimmte Datei für den nächsten Commit bereitstellen

git add .

Alle Änderungen im aktuellen Verzeichnis und darunter bereitstellen

git add -p

Interaktiv auswählen, welche Teile von Dateien gestaged werden sollen (nützlich für partielle Commits)

git clone Ein Repository in ein neues Verzeichnis klonen
git clone -b branch_name URL

Nur den angegebenen Branch klonen (anstatt den Standard)

git clone --depth 1 URL

Nur den neuesten Commit klonen (Shallow Copy, spart Zeit und Speicherplatz)

git commit Änderungen im Repository aufzeichnen
git commit -m "Initial commit"

Commit mit Nachricht ohne Editor öffnen

git commit -a -m "Fix bugs"

Alle geänderten Dateien stagen und committen mit Nachricht

git commit --amend

Den letzten Commit aktualisieren (Nachricht ändern oder weitere Änderungen hinzufügen)

git commit --fixup abc1234

Einen Fixup-Commit erstellen, der später beim interaktiven Rebase automatisch gesquasht wird

git config Repository- oder globale Optionen abrufen und festlegen
git config --global user.name "Name"

Globalen Git-Benutzernamen setzen

git config --global user.email "email@example.com"

Globale Git-E-Mail-Adresse setzen

git config --list

Alle Git-Einstellungen auflisten (Name, E-Mail, Editor usw.)

git diff Änderungen zwischen Commits, Commit und Arbeitsbaum usw. anzeigen
git diff HEAD

Zeigen, was seit dem letzten Commit geändert wurde (unstaged)

git diff --staged

Zeigen, was im nächsten Commit enthalten sein wird

git diff --word-diff HEAD~1

Änderungen auf Wortebene anzeigen

git grep In Repository-Dateien suchen
git grep "functionName"

Alle Vorkommen von functionName in allen Projektdateien finden

git grep -n "TODO"

Zeilen mit TODO finden und Zeilennummern anzeigen (praktisch für Code-Notizen)

git grep -i "login"

Nach dem Wort login ohne Berücksichtigung der Groß-/Kleinschreibung suchen (findet Login, LOGIN, login usw.)

git init Ein leeres Git-Repository erstellen oder ein bestehendes neu initialisieren
git init my-project

Ein neues Repo im Verzeichnis my-project initialisieren

git init --bare

Ein Bare-Repository initialisieren

git log Commit-Logs anzeigen
git log --oneline

Commit-Verlauf in kompaktem Einzeilenformat anzeigen

git log --graph --all

Alle Branches in einem visuellen Commit-Graphen anzeigen

git log -p --stat

Patch und Dateistatistiken zu Commits anzeigen

git reset Dateien unstagen, Änderungen im Arbeitsverzeichnis behalten
git reset HEAD file.txt

Eine Datei aus dem Staging entfernen (Änderungen bleiben erhalten)

git reset --hard HEAD~1

Einen Commit zurückgehen und alle Änderungen löschen (irreversibel!)

git reset --soft HEAD~1

Letzten Commit rückgängig machen, Änderungen aber behalten (erneut commitbar)

git reset --mixed HEAD~1

Einen Commit rückgängig machen, Änderungen aber ungestaged im Arbeitsverzeichnis behalten

git show Verschiedene Objekttypen anzeigen
git show <commit_hash>

Änderungen und Nachricht eines bestimmten Commits anzeigen

git show HEAD~1

Den vorherigen Commit vor dem aktuellen anzeigen

git show --stat

Eine Zusammenfassung der Dateiänderungen des neuesten Commits anzeigen

git status Status des Arbeitsbaums anzeigen
git status -s

Status im Kurzformat anzeigen

git status -b

Aktuellen Branch und Status der Dateien anzeigen

🌿 Branching und Merging

Befehl

Beispiel

Beschreibung

git branch Branches erstellen, auflisten oder löschen
git branch new-feature

Einen neuen Branch namens new-feature erstellen

git branch -d old-feature

Einen lokalen Branch namens old-feature löschen

git checkout Branches wechseln oder Dateien aus einem anderen Commit wiederherstellen
git checkout main

Zum Branch main wechseln

git checkout -b new-branch

Einen neuen Branch new-branch erstellen und wechseln

git switch Branches wechseln (vereinfachte Alternative zu checkout)
git switch main

Zum Branch main wechseln

git switch -c feature-x

Einen neuen Branch namens feature-x erstellen und wechseln

git switch new-feature

Zu einem bestehenden Branch new-feature wechseln

git merge Änderungen aus einem anderen Branch in den aktuellen übernehmen
git merge new-feature

Den Branch new-feature in den aktuellen mergen

git merge --no-ff new-feature

Immer einen Merge-Commit erstellen (auch wenn Fast-Forward möglich ist)

git merge --abort

Merge abbrechen und Änderungen zurücksetzen, falls Konflikte auftreten

git rebase Commits auf einen neuen Basis-Commit verschieben oder neu anwenden
git rebase main

Commits des eigenen Branches auf main neu anwenden

git rebase -i HEAD~3

Die letzten 3 Commits interaktiv bearbeiten

git rebase --abort

Einen laufenden Rebase stoppen und rückgängig machen

git rebase -i --autosquash HEAD~5

Commits, die als fixup oder squash markiert sind, beim interaktiven Rebase automatisch zusammenfassen

git cherry-pick Bestimmte Commits aus einem anderen Branch anwenden
git cherry-pick <hash>

Einen bestimmten Commit (per Hash) im aktuellen Branch anwenden

git cherry-pick --continue

Nach Konfliktlösung den Cherry-Pick fortsetzen

git cherry-pick A^..B

Eine Commit-Spanne von A (exklusiv) bis B (inklusive) anwenden

📡 Remote-Repositories

Befehl

Beispiel

Beschreibung

git remote Verknüpfungen zu Remote-Repositories (z. B. GitHub) verwalten
git remote -v

Remote-Namen und ihre URLs anzeigen

git remote add origin URL

Ein Remote-Repository namens origin hinzufügen

git pull Änderungen aus einem Remote-Branch herunterladen und automatisch mergen
git pull origin main

Änderungen aus dem Remote-Branch main in den aktuellen Branch holen und mergen

git pull --rebase origin main

Änderungen holen und Rebase statt Merge durchführen

git push Lokale Änderungen in ein Remote-Repository hochladen
git push origin main

Den lokalen Branch main in das Remote origin pushen

git fetch Änderungen vom Remote herunterladen, ohne sie zu mergen
git fetch origin

Alle Updates von Remote origin holen, aber nicht anwenden

git fetch origin main

Nur den Branch main vom Remote holen

git fetch --all

Updates von allen Remotes holen

git fetch --prune

Gelöschte Branches aufräumen — lokale Referenzen zu Remote-Branches entfernen

git fetch --dry-run

Anzeigen, was geholt würde, ohne es herunterzuladen

git fetch origin +main

Lokalen Tracking-Branch (origin/main) zwangsweise aktualisieren und Konflikte überschreiben

📦 Stash und Aufräumen

Befehl

Beispiel

Beschreibung

git stash Nicht commitete Änderungen (Work in Progress) temporär speichern
git stash

Geänderte und gestagte Dateien speichern und Arbeitsverzeichnis zurücksetzen

git stash apply

Die zuletzt gespeicherten Stash-Änderungen wieder anwenden (bleibt erhalten)

git stash pop

Den letzten Stash anwenden und entfernen

git stash list

Liste aller gespeicherten Stashes anzeigen

git stash branch feature-fix

Einen neuen Branch erstellen und den letzten Stash darauf anwenden

git clean Nicht versionierte Dateien (nicht in Git) endgültig löschen
git clean -f

Unversionierte Dateien im aktuellen Verzeichnis löschen

git clean -fd

Unversionierte Dateien und Ordner löschen

git clean -n

Vorschau, was gelöscht würde (sicherer Dry-Run)

🏷️ Tags

Befehl

Beispiel

Beschreibung

git tag Tags erstellen, auflisten oder löschen, um bestimmte Punkte in der Historie zu markieren (z. B. Releases)
git tag -a v1.0 -m "Version 1.0"

Einen annotierten Tag v1.0 mit Nachricht erstellen (als vollwertiges Git-Objekt, geeignet für Releases)

git tag -d v1.0

Den lokalen Tag v1.0 löschen (betrifft nicht das Remote)

git push Commits, Branches und Tags von lokal ins Remote-Repository hochladen
git push origin --tags

Alle lokalen Tags ins Remote pushen (praktisch nach mehreren Versionstaggs)

git push origin v1.0

Einen bestimmten Tag (z. B. v1.0) ins Remote pushen

git push origin :refs/tags/v1.0

Den Remote-Tag v1.0 löschen (Colon-Syntax beachten)

🛠️ Konfliktlösung

Befehl

Beispiel

Beschreibung

git mergetool Ein visuelles Tool öffnen, um Merge-Konflikte zu lösen
git mergetool --tool=meld

Ein bestimmtes Merge-Tool (z. B. Meld) verwenden, um Konflikte zu beheben

git rerere Git merken lassen, wie Konflikte zuvor gelöst wurden
git config --global rerere.enabled true

Automatische Wiederverwendung vergangener Konfliktlösungen aktivieren

git rerere status

Anzeigen, welche Dateien gespeicherte Konfliktlösungen haben

git rerere diff

Anzeigen, welche Änderungen Git für die Wiederverwendung gespeichert hat

⚙️ Erweiterte Befehle

Befehl

Beispiel

Beschreibung

git bisect Binäre Suche verwenden, um den Commit zu finden, der einen Bug eingeführt hat
git bisect start

Binäre Suche zwischen bekannt gutem und schlechtem Commit starten

git bisect bad

Aktuellen Commit als “bad” markieren (enthält den Bug)

git bisect good <commit>

Einen bekannten “good” Commit markieren, bei dem der Bug nicht existierte

git blame Zeigen, wer welche Zeile zuletzt geändert hat, mit Revision und Autor
git blame file.txt

Autor- und Commit-Infos für jede Zeile einer Datei anzeigen

git blame -L 10,20 file.txt

Blame-Infos nur für Zeilen 10 bis 20 anzeigen

git blame --show-email file.txt

E-Mail-Adressen der Autoren zusammen mit den Zeilenänderungen anzeigen

git reflog Den Referenz-Log (Reflog) von Branch-Bewegungen und HEAD anzeigen und verwalten
git reflog show main@{1.week.ago}

Sehen, wo der Branch main vor einer Woche war

git reflog expire --expire=30.days --dry-run

Vorschau, welche Reflog-Einträge älter als 30 Tage aufgeräumt werden können

git reflog delete HEAD@{2}

Einen bestimmten Reflog-Eintrag löschen (vorsichtig, da dies die Wiederherstellung beeinträchtigen kann)

git submodule Submodule hinzufügen, initialisieren, aktualisieren oder inspizieren (Repos innerhalb von Repos)
git submodule add URL path

Ein externes Repository als Submodul im angegebenen Pfad hinzufügen

git submodule update --init

Alle in der Repo aufgelisteten Submodule initialisieren und herunterladen

git submodule foreach git pull

git pull in jedem Submodul ausführen, um sie zu aktualisieren

git submodule sync --recursive

Submodul-URLs nach Änderungen in .gitmodules synchronisieren

git submodule update --remote --merge

Submodule auf den neuesten Commit ihrer Remote-Branches aktualisieren

git archive Ein Archiv (zip, tar usw.) von Dateien eines bestimmten Commits oder Branches erstellen
git archive --format=zip HEAD > archive.zip

Ein ZIP-Archiv der aktuellen Projektdateien von HEAD erstellen

git archive -o release.tar.gz HEAD

Ein komprimiertes .tar.gz-Archiv vom aktuellen HEAD erstellen

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Ein .tar.gz-Archiv mit allen Projektdateien erstellen, die im Archiv im Ordner project/ liegen

git gc Unnötige Dateien bereinigen und Repository für bessere Performance optimieren
git gc --aggressive

Eine gründliche Bereinigung und Optimierung durchführen (kann langsam sein, aber effektiv)

git gc --prune=now

Alle unerreichbaren Objekte sofort entfernen (gefährlich, wenn unsicher)

git shortlog Kurze Zusammenfassung der Autoren und ihrer Commits
git shortlog -e

Liste der Autoren mit E-Mail-Adressen anzeigen (z. B. zur Analyse, wer wie viel beigetragen hat)

git shortlog -s -n

Anzeigen, wie viele Commits jeder Autor gemacht hat, sortiert nach Anzahl

git shortlog -sne

Wie oben, aber mit Namen und E-Mails — nützlich für detailliertes Aktivitäts-Tracking

git revert Einen neuen Commit erstellen, der Änderungen eines vorherigen Commits rückgängig macht, ohne die Historie umzuschreiben
git revert HEAD

Den letzten Commit rückgängig machen, indem ein neuer Commit erstellt wird

git revert <commit_hash>

Einen bestimmten Commit per Hash rückgängig machen, indem ein neuer sicherer Commit erstellt wird

🐙 GitHub CLI

gh ermöglicht es dir, GitHub direkt vom Terminal aus zu verwalten.

Befehl

Beispiel

Beschreibung

gh auth login Authentifiziere dich bei einem GitHub-Host, um CLI-Befehlen den Zugriff auf dein Konto zu erlauben
gh auth login --with-token < mytoken.txt

Authentifizierung mit einem persönlichen Zugriffstoken aus einer Datei (mytoken.txt)

gh auth login --hostname enterprise.internal

Authentifizierung bei einem GitHub-Enterprise-Server (nicht github.com)

gh repo clone Ein GitHub-Repository auf die lokale Maschine klonen
gh repo clone user/repo

Das Repository repo des Benutzers user in einen Ordner namens repo klonen

gh repo clone cli/cli -- --depth=1

Das Repository klonen, aber nur den neuesten Commit herunterladen (schneller und platzsparender Clone)

gh repo clone cli/cli workspace/cli

Das Repository in den benutzerdefinierten Ordner workspace/cli klonen

gh issue list Issues in einem GitHub-Repository auflisten, optional nach verschiedenen Kriterien gefiltert
gh issue list --assignee "@me"

Issues anzeigen, die dir zugewiesen sind

gh issue list --state all

Issues unabhängig vom Status (offen oder geschlossen) auflisten

gh issue list --search "error no:assignee sort:created-asc"

Issues mit dem Begriff “error” finden, nicht zugewiesen, sortiert nach Erstellungsdatum aufsteigend

gh pr create Einen Pull Request auf GitHub über die CLI erstellen
gh pr create --title "..."

Einen Pull Request mit dem angegebenen Titel erstellen

gh pr create --project "Roadmap"

Den Pull Request mit einem GitHub-Projekt namens “Roadmap” verknüpfen

gh pr create --base develop --head monalisa:feature

Einen PR vom Branch feature im Fork monalisa in den Branch develop erstellen

gh repo create Ein neues GitHub-Repository über die CLI erstellen
gh repo create my-project

Ein neues Repository namens my-project auf GitHub erstellen (interaktive Eingabeaufforderung folgt)

gh repo create my-project --public --clone

Ein öffentliches Repository erstellen und lokal klonen

gh repo create my-project --private --source=. --remote=upstream

Ein privates Remote-Repository aus dem aktuellen Ordner erstellen und ein Remote namens upstream hinzufügen

💡 Git-Aliasse (nützliche Abkürzungen)

Richte praktische Aliasse ein, um häufige Git-Befehle zu beschleunigen:

git config --global alias.br branch                                       # Abkürzung für: git branch
git config --global alias.ci commit                                       # Abkürzung für: git commit
git config --global alias.co checkout                                     # Abkürzung für: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # Schöne Verlaufsgrafik
git config --global alias.last "log -1 HEAD"                              # Letzten Commit anzeigen
git config --global alias.st status                                       # Abkürzung für: git status

🚀 Erweiterte Git-Befehle für Profis

Befehl

Beispiel

Beschreibung

git filter-repo Ein leistungsstarkes Tool zum Umschreiben der Git-Historie, um Dateien, Autorenschaft oder Pfade zu entfernen oder zu ändern; ersetzt git filter-branch mit besserer Geschwindigkeit und Sicherheit
git filter-repo --path secret.txt --invert-paths

Repository-Historie effizient umschreiben, um sensible Dateien oder Verzeichnisse zu entfernen (schneller als git filter-branch). Vorsicht bei der Nutzung!

git filter-repo --replace-text replacements.txt

Strings oder Muster in der gesamten Historie massenweise ersetzen (z. B. Anmeldedaten bereinigen)

git filter-repo --subdirectory-filter src

Die Historie eines Unterverzeichnisses in ein neues Repository extrahieren, Commit-Metadaten bleiben erhalten

git worktree Mehrere Arbeitsverzeichnisse mit einem einzigen Repository verknüpfen, um parallel an verschiedenen Branches zu arbeiten, ohne zu klonen
git worktree add ../feature feature-branch

Ein zusätzliches Arbeitsverzeichnis für denselben Repo erstellen, um Branches parallel auszuchecken

git worktree list

Alle aktiven Worktrees mit Pfaden und zugehörigen Branches auflisten

git worktree remove ../feature

Ein verknüpftes Worktree entfernen, wenn es nicht mehr benötigt wird, und Arbeitsverzeichnis sicher bereinigen

git replace Temporäre Referenzen erstellen, die bestehende Objekte ersetzen, um eine nicht-destruktive lokale Historienmanipulation und Tests zu ermöglichen
git replace <old_commit> <new_commit>

Einen Commit im lokalen Repo temporär gegen einen anderen austauschen, nützlich zum Testen oder Patchen der Historie

git replace --list

Alle aktiven Ersatz-Referenzen anzeigen

git replace -d <replace_ref>

Eine bestimmte Ersatz-Referenz löschen, um das Verhalten zurückzusetzen

git stash Nicht commitete Änderungen temporär auf einem Stack speichern, um Kontextwechsel ohne unfertige Commits zu ermöglichen
git stash push -p

Interaktiv Änderungen zum Stash auswählen, für granulare Kontrolle

git stash push -m "WIP selective stash"

Einen Stash mit einer benutzerdefinierten Nachricht erstellen, um ihn leichter zu identifizieren

git stash apply stash@{2}

Einen bestimmten Stash aus der Liste anwenden, ohne ihn zu löschen

git rebase Commits auf eine andere Basis neu anwenden, für eine sauberere, lineare Historie und interaktives Editieren
git rebase --interactive --autosquash

Eine interaktive Rebase-Session starten, die automatisch Commits mit fixup/squash zusammenführt

git rebase -i --autosquash HEAD~10

Commits mit fixup/squash automatisch zusammenführen, um die Historie vor dem Push aufzuräumen

git commit --fixup <commit>

Einen Fixup-Commit erstellen, der beim interaktiven Rebase automatisch zusammengeführt wird

git commit --squash <commit>

Einen Squash-Commit erstellen, um ihn beim Rebase mit einem bestimmten Commit zu kombinieren

git bisect Binäre Suche, um den Commit zu finden, der einen Bug eingeführt hat, durch schrittweises Testen von Commits
git bisect run

Bisect automatisieren, indem ein Testskript auf jedem Commit läuft, um den fehlerhaften Commit schnell zu finden

git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh

Bisection durch Testskript automatisieren, um die Fehlersuche deutlich zu beschleunigen

git bisect visualize

Ein grafisches Tool öffnen, um den Bisection-Prozess zu visualisieren

git bisect reset

Bisect-Modus beenden und zum ursprünglichen HEAD zurückkehren

git commit Änderungen mit erweiterten Optionen (Amend, Sign, Fixup, Nachricht) committen, um eine hochwertige Historie zu gewährleisten
git commit --gpg-sign

Einen Commit mit deinem GPG-Schlüssel signieren, um Authentizität kryptografisch zu verifizieren

git commit -S -m "Signed commit"

Commits kryptografisch mit deinem GPG-Schlüssel signieren, um Integrität und Autorenschaft sicherzustellen

git config --global user.signingkey <key_id>

Den globalen GPG-Schlüssel konfigurieren, der zum Signieren verwendet wird

git log --show-signature

GPG-Signaturinformationen für Commits prüfen und anzeigen

git reflog Ein Log aller HEAD- und Branch-Updates aufbewahren — unerlässlich für die Wiederherstellung verlorener Commits und Nachvollziehen der Historie
git reset --hard HEAD@{3}

Den aktuellen Branch mit einem älteren Reflog-Eintrag zurücksetzen, um Änderungen rückgängig zu machen

git reflog expire --expire=now --all

Alle Reflog-Einträge sofort verfallen lassen (Vorsicht!)

🧰 Profi-Workflow-Tipps und Automatisierung

Thema

Befehle / Beispiel

Erklärung & Profi-Tipps

Aggressives Repo-Cleanup

git gc --aggressive --prune=now

Führt eine tiefe Garbage Collection durch und entfernt unerreichbare Objekte sofort zur Optimierung. Ideal während Wartungsfenstern

Parallele Branch-Worktrees

git worktree add ../feature-branch feature

Mehrere Arbeitsverzeichnisse für gleichzeitige Feature-Entwicklung behalten, vermeidet Clone-Overhead

Saubere, lineare Historie

git rebase -i --autosquash

Vor dem Push interaktives Rebase mit Autosquash durchführen, um die Historie sauber und lesbar zu halten

Sichere Commits

git commit -S

Commits mit GPG signieren, um Vertrauen in gemeinsamen Repos zu stärken — in vielen Unternehmen Pflicht

Automatisierte Bisektion

git bisect run ./test-script.sh

Fehlerjagd automatisieren, indem bei Bisect ein Testskript auf jedem Commit läuft

Konfliktlösungs-Cache

git config --global rerere.enabled true

Wiederverwendung von Konfliktlösungen aktivieren, um wiederholte Merge-Konflikte schneller zu lösen

Gemeinsame Aliasse und Hooks

Häufige Git-Aliasse und Commit-Hooks in einem geteilten Repo oder CI-Pipeline speichern, um Teamstandards durchzusetzen und Produktivität zu steigern

Zusätzliche Ressourcen

🧠 Tipp

Nicht alles auswendig lernen. Verwende --help, erkunde und übe regelmäßig:

git help <command>
git status

🌐 Nützliche Links

📘 Offizielle Git-Dokumentation — detailliertes Handbuch für alle Git-Befehle:
https://git-scm.com/docs

📙 Learn Git Branching — interaktives visuelles Tutorial zum Erlernen von Branching-Konzepten:
https://learngitbranching.js.org

📕 Pro Git Buch (kostenlos, von Scott Chacon & Ben Straub):
https://git-scm.com/book

📗 Git Cheatsheet (offizielle kompakte Referenz):
https://education.github.com/git-cheat-sheet-education.pdf