Skip to content

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 lg

Ausgabe-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 --edit

Beispiel .gitconfig:

ini
[alias]
    st = status
    co = checkout
    br = branch
    ci = commit
    lg = log --graph --oneline --decorate --all
    last = log -1 HEAD
    unstage = restore --staged

11.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)

TypeErklärung
FeatureNeue Funktion
FixBugfix
DocsDokumentationsänderung
RefactorCode-Änderung (kein Feature, kein Bugfix)
TestTest hinzugefügt/geändert
ChoreWartungsarbeiten (Dependencies, Build, etc.)
PerfPerformance-Verbesserung
StyleFormatierung (kein Code-Änderung)

🔹 3. Commit-Nachrichten-Richtlinien (Best Practices)

  1. Kurz und prägnant: Maximale 50 Zeichen für die erste Zeile
  2. Präsens verwenden: "Fügt Feature hinzu" statt "Feature hinzugefügt"
  3. Präfix verwenden: Feature:, Fix:, Docs:
  4. Imperativ: "Change" statt "Changed" oder "Changes"
  5. 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-msg

Beispiel-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
fi

11.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.0

Eigenschaften:

  • ✅ 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.0

Vorteile:

  • ✅ 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 --tags

11.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 ..
done

Windows (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
fi

Aktivieren:

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-alt

11.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 stash verwenden (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.



Copyright © 2024 Git-Tutorial für Anfänger

Frei für alle Anfänger