Git-Befehlsreferenz

git init

Initialisiert ein neues Git-Repository im aktuellen Verzeichnis

Beispiele
git init
Tipp: Erstellt versteckten .git Ordner mit Repository-Metadaten
git clone

Klont ein existierendes Repository vom Remote-Server

Beispiele
git clone https://github.com/user/repo.git
Tipp: Lädt komplette Repository-Historie herunter
git status

Zeigt den aktuellen Status des Working Directory und Staging Area

Beispiele
git status --short
Tipp: Unverzichtbar für Überblick über Änderungen
git add

Fügt Dateien zur Staging Area hinzu (bereitet sie für Commit vor)

Beispiele
git add .\ngit add file.txt\ngit add *.js
Tipp: Selektive Staging mit git add -p für interaktive Auswahl
git commit

Erstellt einen neuen Commit mit den Änderungen aus der Staging Area

Beispiele
git commit -m "feat: add user authentication"\ngit commit --amend
Tipp: Verwende aussagekräftige Commit-Messages im Conventional Commits Format
git branch

Verwaltet Branches (auflisten, erstellen, löschen)

Beispiele
git branch\ngit branch feature/new-feature\ngit branch -d old-branch
Tipp: Verwende -D für force delete bei unmerged branches
git checkout

Wechselt zwischen Branches oder stellt Dateien wieder her

Beispiele
git checkout main\ngit checkout -b feature/login\ngit checkout -- file.txt
Tipp: Modern: Verwende git switch für Branch-Wechsel und git restore für Datei-Wiederherstellung
git switch

Moderner Befehl zum Wechseln zwischen Branches

Beispiele
git switch main\ngit switch -c feature/new-ui
Tipp: Eingeführt in Git 2.23 als klarere Alternative zu checkout
git merge

Führt Änderungen aus einem Branch in den aktuellen Branch zusammen

Beispiele
git merge feature/login\ngit merge --no-ff develop
Tipp: --no-ff erstellt immer einen Merge-Commit für bessere Historie
git rebase

Verschiebt Commits auf eine neue Basis für lineare Historie

Beispiele
git rebase main\ngit rebase -i HEAD~3
Tipp: Interaktives Rebase (-i) für Commit-Historie-Bereinigung
git remote

Verwaltet Remote-Repository-Verbindungen

Beispiele
git remote -v\ngit remote add origin https://github.com/user/repo.git
Tipp: origin ist der Standard-Name für das Haupt-Remote-Repository
git fetch

Lädt Änderungen vom Remote-Repository ohne automatisches Merging

Beispiele
git fetch origin\ngit fetch --all
Tipp: Sicherer als pull - ermöglicht Review vor Integration
git pull

Kombiniert fetch und merge in einem Befehl

Beispiele
git pull origin main\ngit pull --rebase
Tipp: --rebase vermeidet überflüssige Merge-Commits
git push

Lädt lokale Commits zum Remote-Repository hoch

Beispiele
git push origin main\ngit push -u origin feature/new-feature
Tipp: -u setzt Upstream-Branch für zukünftige push/pull Operationen
git stash

Speichert Änderungen temporär zwischen ohne Commit

Beispiele
git stash\ngit stash push -m "WIP: refactoring"\ngit stash pop
Tipp: Ideal für schnelle Branch-Wechsel bei unvollständigen Änderungen
git cherry-pick

Wendet spezifische Commits auf den aktuellen Branch an

Beispiele
git cherry-pick abc123\ngit cherry-pick main~2..main
Tipp: Nützlich für selektive Übernahme von Bugfixes
git reset

Setzt Repository auf einen früheren Zustand zurück

Beispiele
git reset --soft HEAD~1\ngit reset --hard origin/main
Tipp: --soft behält Änderungen, --hard verwirft sie vollständig
git reflog

Zeigt Historie aller Git-Operationen (auch gelöschte Commits)

Beispiele
git reflog\ngit reset --hard HEAD@{2}
Tipp: Rettungsanker bei versehentlich gelöschten Commits
git bisect

Binäre Suche zur Lokalisierung von Fehlern in der Historie

Beispiele
git bisect start\ngit bisect bad\ngit bisect good v1.0
Tipp: Automatisiert die Suche nach dem Commit, der einen Bug eingeführt hat
git log

Zeigt Commit-Historie in verschiedenen Formaten

Beispiele
git log --oneline\ngit log --graph --pretty=format:"%h %s"
Tipp: --graph visualisiert Branch-Struktur, --oneline für kompakte Ansicht
git diff

Zeigt Unterschiede zwischen verschiedenen Zuständen

Beispiele
git diff\ngit diff --staged\ngit diff HEAD~1..HEAD
Tipp: --staged zeigt Unterschiede in der Staging Area
git show

Zeigt Details eines spezifischen Commits

Beispiele
git show abc123\ngit show HEAD~2
Tipp: Kombiniert Commit-Metadaten mit Diff-Ausgabe
git blame

Zeigt für jede Zeile einer Datei den verantwortlichen Commit

Beispiele
git blame file.txt\ngit blame -L 10,20 file.txt
Tipp: Unverzichtbar für Code-Archäologie und Verantwortlichkeit

Git Workflows

Git Flow

Strukturierter Workflow für Release-Management

Ablauf

  1. Haupt-Branches: main (production) und develop (integration)
  2. Feature-Branches: feature/* für neue Funktionen
  3. Release-Branches: release/* für Vorbereitung neuer Releases
  4. Hotfix-Branches: hotfix/* für kritische Bugfixes
  5. Merging erfolgt über Pull/Merge Requests mit Code Review

Wichtige Befehle

git checkout -b feature/user-auth develop
git checkout develop && git merge --no-ff feature/user-auth
git checkout -b release/1.2.0 develop
git checkout main && git merge --no-ff release/1.2.0

GitHub Flow

Einfacher, kontinuierlicher Deployment-Workflow

Ablauf

  1. Ein Haupt-Branch (main) mit stabiler, deployable Code
  2. Feature-Branches für alle Änderungen
  3. Pull Requests für Code Review und Discussion
  4. Automatische Tests vor dem Merge
  5. Continuous Deployment nach erfolgreichem Merge

Wichtige Befehle

git checkout -b fix/navbar-responsive
git push -u origin fix/navbar-responsive
# Erstelle Pull Request über GitHub Interface
git checkout main && git pull origin main

Conventional Commits

Standardisierte Commit-Messages für automatisierte Tools

Ablauf

  1. Format: type(scope): description
  2. Types: feat, fix, docs, style, refactor, test, chore
  3. Breaking Changes: type!: description oder BREAKING CHANGE in Footer
  4. Automatische Changelog-Generierung möglich
  5. Semantic Versioning kann automatisch abgeleitet werden

Wichtige Befehle

git commit -m "feat(auth): add JWT token validation"
git commit -m "fix(api): handle null values in user endpoint"
git commit -m "docs: update API documentation"
git commit -m "feat!: remove deprecated login method"

Best Practices

Commit Best Practices

  • Mache kleine, atomare Commits mit einer logischen Änderung
  • Schreibe aussagekräftige Commit-Messages im Imperativ
  • Committe häufig - mindestens einmal am Ende des Arbeitstags
  • Verwende die Staging Area bewusst für selektive Commits
  • Teste Code vor dem Commit (lokale Tests, Linting)
🌿

Branch-Strategien

  • Verwende deskriptive Branch-Namen (feature/login-system)
  • Lösche Branches nach dem Merge zur Repository-Hygiene
  • Halte Branches kurzlebig und fokussiert
  • Rebase Feature-Branches vor dem Merge für saubere Historie
  • Verwende Branch-Protection-Rules für wichtige Branches
👥

Team-Zusammenarbeit

  • Führe immer Code Reviews durch Pull/Merge Requests durch
  • Verwende Pre-Commit-Hooks für Code Quality Checks
  • Dokumentiere Änderungen in Commit-Messages und PR-Beschreibungen
  • Synchronisiere regelmäßig mit dem Remote-Repository
  • Verwende .gitignore für Build-Artefakte und temporäre Dateien
🔒

Sicherheit

  • Committe niemals Passwörter, API-Keys oder Secrets
  • Verwende SSH-Keys oder Personal Access Tokens für Authentifizierung
  • Signiere wichtige Commits mit GPG für Authentizität
  • Verwende git-secrets oder ähnliche Tools zur Secret-Detection
  • Überprüfe .gitignore auf sensible Dateien vor dem ersten Commit

Troubleshooting

Häufige Probleme

Problem: Versehentlich falschen Commit gemacht

Low
Lösung: git reset --soft HEAD~1 (behält Änderungen) oder git commit --amend (ändert letzten Commit)

Problem: Merge-Konflikte aufgetreten

Medium
Lösung: Konflikte manuell in Dateien lösen, git add für gelöste Dateien, dann git commit

Problem: Branch aus Versehen gelöscht

High
Lösung: git reflog um Hash zu finden, dann git checkout -b recovered-branch <hash>

Problem: Versehentlich nach Remote gepusht

High
Lösung: git push --force-with-lease (vorsichtig!) oder git revert für sichere Rückgängigmachung

Problem: Working Directory verschmutzt

Medium
Lösung: git stash für temporäres Speichern oder git reset --hard für komplette Verwerfung

Daten-Recovery

git reflog # Zeigt alle HEAD-Bewegungen
git fsck --lost-found # Findet verwaiste Commits
git show <hash> # Überprüft Commit-Inhalt
git branch recovery <hash> # Erstellt Branch von verlorenem Commit

Quick Reference Cheat Sheet

Setup & Config

git config --global user.name "Name" git config --global user.email "email@example.com" git config --global init.defaultBranch main

Daily Workflow

git status git add . git commit -m "message" git push git pull

Branching

git branch git switch -c new-branch git merge branch-name git branch -d branch-name

Inspection

git log --oneline git diff git show HEAD git blame file.txt

Undo Changes

git reset --soft HEAD~1 git restore file.txt git revert commit-hash git stash

Remote

git remote -v git fetch origin git push -u origin main git pull --rebase

Interaktiver Git-Terminal

~/project — git-shell
~/project ❯ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
~/project ❯