Git Referenz & Best Practices
Umfassende Anleitung für professionelle Versionskontrolle
Git ist das wichtigste Tool für Versionskontrolle in der modernen Softwareentwicklung. Diese Referenz deckt alle essentiellen Befehle und Workflows ab.
Git-Befehlsreferenz
git init
Initialisiert ein neues Git-Repository im aktuellen Verzeichnis
git init
git clone
Klont ein existierendes Repository vom Remote-Server
git clone https://github.com/user/repo.git
git status
Zeigt den aktuellen Status des Working Directory und Staging Area
git status --short
git add
Fügt Dateien zur Staging Area hinzu (bereitet sie für Commit vor)
git add .\ngit add file.txt\ngit add *.js
git commit
Erstellt einen neuen Commit mit den Änderungen aus der Staging Area
git commit -m "feat: add user authentication"\ngit commit --amend
git branch
Verwaltet Branches (auflisten, erstellen, löschen)
git branch\ngit branch feature/new-feature\ngit branch -d old-branch
git checkout
Wechselt zwischen Branches oder stellt Dateien wieder her
git checkout main\ngit checkout -b feature/login\ngit checkout -- file.txt
git switch
Moderner Befehl zum Wechseln zwischen Branches
git switch main\ngit switch -c feature/new-ui
git merge
Führt Änderungen aus einem Branch in den aktuellen Branch zusammen
git merge feature/login\ngit merge --no-ff develop
git rebase
Verschiebt Commits auf eine neue Basis für lineare Historie
git rebase main\ngit rebase -i HEAD~3
git remote
Verwaltet Remote-Repository-Verbindungen
git remote -v\ngit remote add origin https://github.com/user/repo.git
git fetch
Lädt Änderungen vom Remote-Repository ohne automatisches Merging
git fetch origin\ngit fetch --all
git pull
Kombiniert fetch und merge in einem Befehl
git pull origin main\ngit pull --rebase
git push
Lädt lokale Commits zum Remote-Repository hoch
git push origin main\ngit push -u origin feature/new-feature
git stash
Speichert Änderungen temporär zwischen ohne Commit
git stash\ngit stash push -m "WIP: refactoring"\ngit stash pop
git cherry-pick
Wendet spezifische Commits auf den aktuellen Branch an
git cherry-pick abc123\ngit cherry-pick main~2..main
git reset
Setzt Repository auf einen früheren Zustand zurück
git reset --soft HEAD~1\ngit reset --hard origin/main
git reflog
Zeigt Historie aller Git-Operationen (auch gelöschte Commits)
git reflog\ngit reset --hard HEAD@{2}
git bisect
Binäre Suche zur Lokalisierung von Fehlern in der Historie
git bisect start\ngit bisect bad\ngit bisect good v1.0
git log
Zeigt Commit-Historie in verschiedenen Formaten
git log --oneline\ngit log --graph --pretty=format:"%h %s"
git diff
Zeigt Unterschiede zwischen verschiedenen Zuständen
git diff\ngit diff --staged\ngit diff HEAD~1..HEAD
git show
Zeigt Details eines spezifischen Commits
git show abc123\ngit show HEAD~2
git blame
Zeigt für jede Zeile einer Datei den verantwortlichen Commit
git blame file.txt\ngit blame -L 10,20 file.txt
Git Workflows
Git Flow
Strukturierter Workflow für Release-Management
Ablauf
- Haupt-Branches: main (production) und develop (integration)
- Feature-Branches: feature/* für neue Funktionen
- Release-Branches: release/* für Vorbereitung neuer Releases
- Hotfix-Branches: hotfix/* für kritische Bugfixes
- 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
- Ein Haupt-Branch (main) mit stabiler, deployable Code
- Feature-Branches für alle Änderungen
- Pull Requests für Code Review und Discussion
- Automatische Tests vor dem Merge
- 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
- Format: type(scope): description
- Types: feat, fix, docs, style, refactor, test, chore
- Breaking Changes: type!: description oder BREAKING CHANGE in Footer
- Automatische Changelog-Generierung möglich
- 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
LowProblem: Merge-Konflikte aufgetreten
MediumProblem: Branch aus Versehen gelöscht
HighProblem: Versehentlich nach Remote gepusht
HighProblem: Working Directory verschmutzt
MediumDaten-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