📁 Git

docs/Git

Git Commands Reference

Eine umfassende Übersicht über die wichtigsten Git-Befehle, kategorisiert nach globalen und repository-spezifischen Kommandos.

🌍 Globale Git-Konfiguration

Grundlegende Identitätskonfiguration

# Globaler Benutzername
git config --global user.name "Dein Name"

# Globale E-Mail-Adresse
git config --global user.email "deine.email@example.com"

# Standardeditor festlegen
git config --global core.editor "code"  # VS Code
git config --global core.editor "vim"   # Vim
git config --global core.editor "nano"  # Nano

Globale Einstellungen

# Standardbranch-Name festlegen
git config --global init.defaultBranch main

# Automatische Zeilenendekorrektur
git config --global core.autocrlf true    # Windows
git config --global core.autocrlf input   # macOS/Linux

# Farben aktivieren
git config --global color.ui auto

# Push-Verhalten festlegen
git config --global push.default simple

# Pull-Verhalten (rebase statt merge)
git config --global pull.rebase true

# Globale .gitignore-Datei
git config --global core.excludesfile ~/.gitignore_global

Aliases (Globale Shortcuts)

# Kurze Status-Anzeige
git config --global alias.st status

# Kurze Log-Anzeige
git config --global alias.lg "log --oneline --graph --decorate"

# Schöne Log-Anzeige
git config --global alias.lol "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# Checkout-Alias
git config --global alias.co checkout

# Branch-Alias
git config --global alias.br branch

# Commit-Alias
git config --global alias.ci commit

# Unstage-Alias
git config --global alias.unstage "reset HEAD --"

# Last commit
git config --global alias.last "log -1 HEAD"

Globale Konfiguration anzeigen

# Alle globalen Einstellungen anzeigen
git config --global --list

# Spezifische Einstellung anzeigen
git config --global user.name

# Konfigurationsdatei bearbeiten
git config --global --edit

📁 Repository-spezifische Befehle

🚀 Neues Repository von Grund auf erstellen

Kompletter Workflow für neues Repository

# 1. README-Datei erstellen
touch README.md

# 2. Git-Repository initialisieren
git init

# 3. Zu main-Branch wechseln (falls nicht bereits default)
git checkout -b main

# 4. README zur Staging Area hinzufügen
git add README.md

# 5. Ersten Commit erstellen
git commit -m "first commit"

# 6. Remote Repository hinzufügen
git remote add origin https://github.com/username/repository.git

# 7. Branch zum Remote Repository pushen und tracken
git push -u origin main

Alternative für existierendes lokales Repository

# Wenn bereits Dateien vorhanden sind
git init
git add .
git commit -m "Initial commit"
git branch -M main  # Branch zu main umbenennen (falls nötig)
git remote add origin https://github.com/username/repository.git
git push -u origin main

Schnell-Setup mit verschiedenen Dateitypen

# Mehrere Startdateien erstellen
touch README.md .gitignore LICENSE

# Alle Dateien hinzufügen
git add .

# Oder spezifisch
git add README.md .gitignore LICENSE

# Ersten Commit mit detaillierter Nachricht
git commit -m "Initial commit

- Add README.md
- Add .gitignore
- Add LICENSE file"

# Remote hinzufügen und pushen
git remote add origin https://github.com/username/repository.git
git push -u origin main

Repository-Initialisierung und -Klonen

# Neues Repository initialisieren
git init

# Repository klonen
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git  # SSH

# Repository mit spezifischem Ordnernamen klonen
git clone https://github.com/user/repo.git mein-ordner

# Nur den neuesten Commit klonen (shallow clone)
git clone --depth 1 https://github.com/user/repo.git

Lokale Repository-Konfiguration

# Repository-spezifischen Benutzernamen setzen
git config user.name "Anderer Name"

# Repository-spezifische E-Mail setzen
git config user.email "andere.email@example.com"

# Repository-Konfiguration anzeigen
git config --list --local

Working Directory und Staging

# Status des Repositories anzeigen
git status
git status -s  # Kurze Ausgabe

# Dateien zur Staging Area hinzufügen
git add datei.txt
git add .                    # Alle Änderungen
git add -A                   # Alle Änderungen (inklusive gelöschte)
git add *.js                 # Alle JavaScript-Dateien
git add ordner/              # Ganzen Ordner hinzufügen

# Interaktives Hinzufügen
git add -i
git add -p  # Patch-Modus (teilweise hinzufügen)

# Dateien aus Staging Area entfernen
git reset datei.txt
git reset                    # Alle Dateien aus Staging entfernen
git restore --staged datei.txt  # Alternative zu reset

# Änderungen verwerfen
git restore datei.txt        # Änderungen in Datei verwerfen
git checkout -- datei.txt   # Alternative zu restore
git clean -f                 # Ungetrackte Dateien löschen
git clean -fd                # Ungetrackte Dateien und Ordner löschen

Commits

# Commit erstellen
git commit -m "Commit-Nachricht"

# Alle getrackte Änderungen committen (ohne git add)
git commit -a -m "Commit-Nachricht"
git commit -am "Commit-Nachricht"

# Leerer Commit (für Trigger etc.)
git commit --allow-empty -m "Leerer Commit"

# Letzten Commit ändern
git commit --amend -m "Neue Commit-Nachricht"
git commit --amend --no-edit  # Ohne Nachricht zu ändern

# Commit mit Autor überschreiben
git commit --author="Name <email@example.com>" -m "Nachricht"

Branches

# Branches anzeigen
git branch                   # Lokale Branches
git branch -r               # Remote Branches
git branch -a               # Alle Branches

# Neuen Branch erstellen
git branch neuer-branch

# Branch erstellen und wechseln
git checkout -b neuer-branch
git switch -c neuer-branch   # Moderne Alternative

# Zu Branch wechseln
git checkout branch-name
git switch branch-name       # Moderne Alternative

# Branch umbenennen
git branch -m alter-name neuer-name
git branch -m neuer-name     # Aktuellen Branch umbenennen

# Branch löschen
git branch -d branch-name    # Sicheres Löschen
git branch -D branch-name    # Erzwungenes Löschen

# Remote Branch löschen
git push origin --delete branch-name

Remote Repositories

# Remote Repositories anzeigen
git remote
git remote -v               # Mit URLs

# Remote Repository hinzufügen
git remote add origin https://github.com/user/repo.git

# Remote Repository URL ändern
git remote set-url origin https://github.com/user/neues-repo.git

# Remote Repository entfernen
git remote remove origin

# Vom Remote Repository holen (ohne merge)
git fetch origin

# Vom Remote Repository holen und mergen
git pull origin main
git pull                    # Mit getracktem Branch

# Zum Remote Repository pushen
git push origin main
git push                    # Mit getracktem Branch
git push -u origin main     # Branch tracken und pushen

# Alle Branches pushen
git push --all origin

# Tags pushen
git push --tags origin

# Force Push (Vorsicht!)
git push --force-with-lease origin main
git push -f origin main     # Gefährlicher Force Push

Merging und Rebasing

# Branch mergen
git merge feature-branch

# Fast-Forward Merge verhindern
git merge --no-ff feature-branch

# Merge abbrechen
git merge --abort

# Rebase
git rebase main             # Aktuellen Branch auf main rebasen
git rebase --interactive HEAD~3  # Interaktives Rebase der letzten 3 Commits

# Rebase abbrechen
git rebase --abort

# Rebase fortsetzen (nach Konfliktlösung)
git rebase --continue

History und Logs

# Commit-History anzeigen
git log
git log --oneline           # Kompakte Anzeige
git log --graph             # Grafische Darstellung
git log --all --graph       # Alle Branches grafisch
git log -p                  # Mit Änderungen
git log -n 5               # Nur die letzten 5 Commits

# Bestimmten Zeitraum anzeigen
git log --since="2 weeks ago"
git log --until="2023-12-31"
git log --author="Name"

# Änderungen zwischen Commits anzeigen
git diff
git diff --staged           # Staging Area vs. letzter Commit
git diff HEAD~1             # Gegen vorletzten Commit
git diff branch1..branch2   # Zwischen Branches

# Datei-History
git log --follow datei.txt
git blame datei.txt         # Zeigt wer was geändert hat

Stashing

# Änderungen temporär speichern
git stash
git stash save "Beschreibung"

# Stash-Liste anzeigen
git stash list

# Stash anwenden
git stash apply             # Neuesten Stash anwenden
git stash apply stash@{2}   # Spezifischen Stash anwenden

# Stash anwenden und löschen
git stash pop

# Stash löschen
git stash drop stash@{0}
git stash clear             # Alle Stashes löschen

# Ungetrackte Dateien mit stashen
git stash -u

Tags

# Tags anzeigen
git tag
git tag -l "v1.*"          # Tags mit Pattern

# Lightweight Tag erstellen
git tag v1.0

# Annotated Tag erstellen
git tag -a v1.0 -m "Version 1.0"

# Tag zu spezifischem Commit
git tag -a v1.0 9fceb02 -m "Version 1.0"

# Tag löschen
git tag -d v1.0

# Remote Tag löschen
git push origin --delete v1.0

# Tag auschecken
git checkout v1.0

Reset und Revert

# Soft Reset (behält Änderungen in Staging)
git reset --soft HEAD~1

# Mixed Reset (behält Änderungen im Working Directory)
git reset HEAD~1
git reset --mixed HEAD~1

# Hard Reset (verwirft alle Änderungen)
git reset --hard HEAD~1

# Zu spezifischem Commit resetten
git reset --hard 9fceb02

# Commit rückgängig machen (sicher für öffentliche Repos)
git revert HEAD
git revert 9fceb02

Nützliche Utilities

# Repository-Status bereinigen
git gc                      # Garbage Collection
git fsck                    # Repository-Integrität prüfen

# Repository-Größe optimieren
git gc --aggressive

# Reflog anzeigen (lokale History)
git reflog

# Verlorene Commits finden
git fsck --lost-found

# Suche in Repository
git grep "Suchbegriff"
git log --grep="Commit-Nachricht suchen"

# Dateien umbenennen (Git-tracked)
git mv alte-datei.txt neue-datei.txt

# Repository-Root finden
git rev-parse --show-toplevel

# Aktuellen Branch-Namen ausgeben
git branch --show-current
git rev-parse --abbrev-ref HEAD

🚨 Wichtige Tipps

.gitignore Beispiele

# Betriebssystem
.DS_Store
Thumbs.db

# IDE/Editor
.vscode/
.idea/
*.swp
*.swo

# Dependencies
node_modules/
vendor/

# Build-Artefakte
dist/
build/
*.o
*.exe

# Logs
*.log
logs/

# Umgebungsvariablen
.env
.env.local

# Temporäre Dateien
*.tmp
*.temp

Häufige Workflows

# Feature Branch Workflow
git checkout main
git pull origin main
git checkout -b feature/neue-funktion
# ... Entwicklung ...
git add .
git commit -m "Neue Funktion implementiert"
git push -u origin feature/neue-funktion
# ... Pull Request erstellen ...
git checkout main
git pull origin main
git branch -d feature/neue-funktion

# Hotfix Workflow
git checkout main
git checkout -b hotfix/kritischer-bug
# ... Bugfix ...
git add .
git commit -m "Kritischen Bug behoben"
git push -u origin hotfix/kritischer-bug

SSH-Keys für GitHub/GitLab

# SSH-Key generieren
ssh-keygen -t ed25519 -C "deine.email@example.com"

# SSH-Agent starten
eval "$(ssh-agent -s)"

# SSH-Key hinzufügen
ssh-add ~/.ssh/id_ed25519

# Öffentlichen Schlüssel anzeigen (zum Kopieren)
cat ~/.ssh/id_ed25519.pub

Hinweis: Diese Referenz deckt die wichtigsten Git-Befehle ab. Für spezielle Anwendungsfälle solltest du die offizielle Git-Dokumentation konsultieren.