Appearance
Kapitel 11: Fortgeschrittene Git-Tipps
11.1 Git-Aliase konfigurieren (Effizienzsteigerung)
📖 Was sind Git-Aliase?
Aliase sind Kurzbefehle für häufig verwendete Git-Befehle.
Vorteile:
- ✅ Weniger Tippaufwand
- ✅ Schnellere Arbeitsabläufe
- ✅ Personalisierte Befehle
🔹 1. Aliase global konfigurieren
bash
# Kurzbefehle erstellen
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
# Verwendung:
git st # statt git status
git co # statt git checkout
git br # statt git branch
git ci # statt git commit🔹 2. Erweiterte Aliase (Mit Log-Grafik)
bash
# Schöne Log-Anzeige
git config --global alias.lg "log --graph --oneline --decorate --all"
# Verwendung:
git lgAusgabe-Beispiel:
* a1b2c3d (HEAD -> main) Feature: Login hinzugefügt
| * e4f5g6h (feature-payment) Feature: Zahlung integriert
|/
* b7c8d9e Fix: Bug behoben🔹 3. Aliase in der Konfigurationsdatei anzeigen
bash
# Alle Aliase anzeigen
git config --global --get-regexp alias
# Ausgabe-Beispiel:
# alias.st status
# alias.co checkout
# alias.lg log --graph --oneline --decorate --all🔹 4. Aliase direkt in .gitconfig bearbeiten
bash
# .gitconfig öffnen (global)
git config --global --edit
# Oder in VS Code öffnen
git config --global core.editor "code --wait"
git config --global --editBeispiel .gitconfig:
ini
[alias]
st = status
co = checkout
br = branch
ci = commit
lg = log --graph --oneline --decorate --all
last = log -1 HEAD
unstage = restore --staged11.2 Commit-Nachrichten-Richtlinien (Unternehmensstandard)
📖 Warum standardisierte Commit-Nachrichten?
- ✅ Lesbarkeit: Teammitglieder verstehen Änderungen schnell
- ✅ Automatisierung: Changelogs können automatisch generiert werden
- ✅ Git History: Saubere, professionelle Historie
🔹 1. Conventional Commits (Industriestandard)
Format:
<type>[optional scope]: <description>
[optional body]
[optional footer]Beispiele:
Fix: Bug in Login-Validierung behoben
Feature: User-Profil-Seite hinzugefügt
Docs: README aktualisiert
Refactor: Code in auth.js bereinigt
Chore: Abhängigkeiten aktualisiert🔹 2. Typen (Types)
| Type | Erklärung |
|---|---|
| Feature | Neue Funktion |
| Fix | Bugfix |
| Docs | Dokumentationsänderung |
| Refactor | Code-Änderung (kein Feature, kein Bugfix) |
| Test | Test hinzugefügt/geändert |
| Chore | Wartungsarbeiten (Dependencies, Build, etc.) |
| Perf | Performance-Verbesserung |
| Style | Formatierung (kein Code-Änderung) |
🔹 3. Commit-Nachrichten-Richtlinien (Best Practices)
- Kurz und prägnant: Maximale 50 Zeichen für die erste Zeile
- Präsens verwenden: "Fügt Feature hinzu" statt "Feature hinzugefügt"
- Präfix verwenden:
Feature:,Fix:,Docs: - Imperativ: "Change" statt "Changed" oder "Changes"
- Body verwenden: Bei komplexen Änderungen (nach einer Leerzeile)
Beispiel (gut):
Fix: Header-Ausrichtung auf Mobile gerade
- Problem: Header war verschoben auf Bildschirmen < 768px
- Lösung: Media-Query in style.css hinzugefügt
- Betrifft: Issue #123🔹 4. Commit-Nachrichten durchsetzen (Git Hooks)
bash
# .git/hooks/commit-msg erstellen (lokal)
touch .git/hooks/commit-msg
chmod +x .git/hooks/commit-msgBeispiel-Skript (einfach):
bash
#!/bin/bash
# .git/hooks/commit-msg
MSG_FILE=$1
MSG=$(cat $MSG_FILE)
# Prüfen, ob Präfix vorhanden ist
if ! echo "$MSG" | grep -qE "^(Feature|Fix|Docs|Refactor|Test|Chore):"; then
echo "Fehler: Commit-Nachricht muss mit Typ beginnen (Feature:, Fix:, etc.)"
exit 1
fi11.3 Tag-Verwaltung (Versionsveröffentlichung)
📖 Was sind Tags?
Tags markieren wichtige Meilensteine (z.B. Version 1.0.0).
🔹 1. Leichtgewichts-Tags (Lightweight)
bash
# Einfaches Tag erstellen
git tag v1.0.0
# Tag anzeigen
git show v1.0.0Eigenschaften:
- ✅ Einfach
- ❌ Keine Metadaten (Datum, Autor, Nachricht)
🔹 2. Annotierte Tags (Empfohlen)
bash
# Annotiertes Tag erstellen
git tag -a v1.0.0 -m "Version 1.0.0 Release"
# Tag mit spezifischem Commit verknüpfen
git tag -a v0.9.0 a1b2c3d -m "Beta-Release"
# Tag anzeigen (mit Details)
git show v1.0.0Vorteile:
- ✅ Enthält Metadaten (Autor, Datum, Nachricht)
- ✅ Sicherer (kann signiert werden)
🔹 3. Tags auflisten und löschen
bash
# Alle Tags anzeigen
git tag
# Tags mit Suchmuster filtern
git tag -l "v1.0*"
# Tag löschen (lokal)
git tag -d v1.0.0
# Tag löschen (remote)
git push origin :refs/tags/v1.0.0🔹 4. Tags pushen
bash
# Einzelnes Tag pushen
git push origin v1.0.0
# Alle Tags pushen
git push origin --tags11.4 git stash verwenden (Temporäre Speicherung)
📖 Was ist git stash?
git stash speichert temporäre Änderungen (ohne Commit) und stellt das Arbeitsverzeichnis wieder her.
Anwendungsszenarien:
- ✅ Sie müssen dringend einen Bugfix machen, aber Ihre aktuelle Arbeit ist noch nicht commit-bereit
- ✅ Sie möchten Branches wechseln, ohne committen zu müssen
🔹 1. Änderungen stashen (Speichern)
bash
# Alle getrackten Änderungen stashen
git stash
# Mit Beschreibung (empfohlen)
git stash push -m "Work in progress: Login-Feature"
# Auch ungetrackte Dateien stashen
git stash -u🔹 2. Stash-Liste anzeigen
bash
# Alle Stashes anzeigen
git stash list
# Ausgabe-Beispiel:
# stash@{0}: On feature-login: Work in progress: Login-Feature
# stash@{1}: On main: Bugfix experiment🔹 3. Stash wiederherstellen
bash
# Neuesten Stash wiederherstellen (und aus Liste entfernen)
git stash pop
# Spezifischen Stash wiederherstellen (ohne zu entfernen)
git stash apply stash@{2}
# Neuesten Stash wiederherstellen (ohne zu entfernen)
git stash apply🔹 4. Stash löschen
bash
# Einzelnen Stash löschen
git stash drop stash@{0}
# Alle Stashes löschen
git stash clear🔹 5. Stash in neuen Branch anwenden
bash
# Stash in neuen Branch anwenden (nützlich bei Konflikten)
git stash branch feature-von-stash stash@{0}11.5 Batch-Operationen & Skripte (Fortgeschrittene)
🔹 1. Batch-Operationen (Mehrere Repositories gleichzeitig)
Szenario: Sie haben viele Projekte und müssen überall git pull ausführen.
Lösung: Skript erstellen
bash
#! /bin/bash
# pull-all.sh (Linux/Mac)
for dir in ~/projekte/*/; do
echo "Pulling in $dir"
cd "$dir" || continue
git pull origin main
cd ..
doneWindows (PowerShell):
powershell
# pull-all.ps1
Get-ChildItem "C:\projekte" -Directory | ForEach-Object {
Set-Location $_.FullName
git pull origin main
}🔹 2. Git-Hooks für Automatisierung
Beispiel: pre-commit Hook (Tests vor Commit ausführen)
bash
#! /bin/bash
# .git/hooks/pre-commit
echo "Running tests..."
npm test
if [ $? -ne 0 ]; then
echo "Tests failed! Commit abgebrochen."
exit 1
fiAktivieren:
bash
chmod +x .git/hooks/pre-commit🔹 3. Git-Aliase mit Parametern (Erweitert)
bash
# Alias mit Parameter (letzten Commit ändern)
git config --global alias.amend "commit --amend"
# Alias für "Branch löschen (remote + lokal)"
git config --global alias.delete-branch "!f() { git push origin --delete $1; git branch -d $1; }; f"
# Verwendung:
git delete-branch feature-alt11.6 Git-Performance-Optimierung (Große Projekte)
🔹 1. Shallow Clone (Schnelleres Klonen)
bash
# Nur die letzten N Commits klonen (spart Zeit/Platz)
git clone --depth 1 https://github.com/großes-projekt.git
# Später: Historie bei Bedarf nachladen
git fetch --unshallow🔹 2. Git Garbage Collection (gc)
bash
# Repository bereinigen (entfernt unnötige Dateien)
git gc --aggressive
# Automatische Bereinigung erzwingen
git config --global gc.auto 0🔹 3. Git LFS (Large File Storage)
Für große Binärdateien (Bilder, Videos, etc.):
bash
# Git LFS installieren
git lfs install
# Große Dateien tracken
git lfs track "*.psd"
git lfs track "*.mp4"
# .gitattributes committen
git add .gitattributes
git commit -m "Config: Git LFS für große Dateien konfiguriert"📝 Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅ Git-Aliase konfigurieren (Effizienzsteigerung)
- ✅ Commit-Nachrichten-Richtlinien (Conventional Commits)
- ✅ Tag-Verwaltung (Versionsveröffentlichung)
- ✅
git stashverwenden (temporäre Speicherung) - ✅ Batch-Operationen & Skripte (Automatisierung)
- ✅ Git-Performance-Optimierung (große Projekte)
Nächstes Kapitel: Wir werden häufige Git-Fehler und Fehlerbehebung behandeln.
🔗 Weiterführende Links
Copyright © 2024 Git-Tutorial für Anfänger
