commit 9aacec901add8da30d3b9ebae7c21a42cd721ced Author: admin Date: Wed Feb 4 13:30:54 2026 +0000 Add README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..a23baa8 --- /dev/null +++ b/README.md @@ -0,0 +1,605 @@ +# Git CheatSheet + +Übersicht der wichtigsten Git-Befehle mit praktischen Beispielen. + +--- + +## Repository erstellen & klonen + +```bash +# Neues Repository im aktuellen Verzeichnis initialisieren +git init + +# Neues Repository mit Verzeichnis erstellen +git init mein-projekt + +# Bestehendes Repository klonen +git clone https://github.com/user/repo.git + +# Klonen in ein bestimmtes Verzeichnis +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 +``` + +--- + +## Konfiguration + +```bash +# Benutzername setzen (global) +git config --global user.name "Max Mustermann" + +# E-Mail setzen (global) +git config --global user.email "max@example.com" + +# Konfiguration nur für aktuelles Repo +git config user.name "Max Mustermann" + +# Alle Einstellungen anzeigen +git config --list + +# Standard-Branch-Name setzen +git config --global init.defaultBranch main + +# Editor festlegen +git config --global core.editor "code --wait" + +# Aliase erstellen +git config --global alias.co checkout +git config --global alias.br branch +git config --global alias.st status +git config --global alias.lg "log --oneline --graph --all" +``` + +--- + +## Status & Änderungen + +```bash +# Aktuellen Status anzeigen +git status + +# Kurzform des Status +git status -s + +# Änderungen anzeigen (noch nicht gestaged) +git diff + +# Änderungen anzeigen (bereits gestaged) +git diff --staged + +# Änderungen einer bestimmten Datei +git diff datei.txt + +# Vergleich zwischen zwei Branches +git diff main..feature-branch + +# Vergleich zwischen zwei Commits +git diff abc123 def456 +``` + +--- + +## Dateien hinzufügen (Staging) + +```bash +# Einzelne Datei hinzufügen +git add datei.txt + +# Mehrere Dateien hinzufügen +git add datei1.txt datei2.txt + +# Alle Dateien im aktuellen Verzeichnis +git add . + +# Alle Änderungen (inkl. gelöschte Dateien) +git add -A + +# Interaktiv Teile einer Datei hinzufügen +git add -p datei.txt + +# Dateien nach Muster hinzufügen +git add *.js +git add src/ +``` + +--- + +## Commits + +```bash +# Commit mit Nachricht +git commit -m "Kurze Beschreibung der Änderung" + +# Alle geänderten Dateien committen (ohne git add) +git commit -am "Änderungen committen" + +# Letzten Commit ändern (Nachricht oder Dateien) +git commit --amend -m "Neue Nachricht" + +# Leeren Commit erstellen (z.B. für CI-Trigger) +git commit --allow-empty -m "Trigger CI" + +# Commit mit mehrzeiliger Nachricht +git commit -m "Titel" -m "Detaillierte Beschreibung" +``` + +--- + +## Branches + +```bash +# Alle lokalen Branches anzeigen +git branch + +# Alle Branches (lokal + remote) +git branch -a + +# Neuen Branch erstellen +git branch feature-login + +# Branch erstellen und wechseln +git checkout -b feature-login +# oder (neuere Syntax) +git switch -c feature-login + +# Zu einem Branch wechseln +git checkout main +# oder +git switch main + +# Branch umbenennen +git branch -m alter-name neuer-name + +# Branch löschen (lokal) +git branch -d feature-login + +# Branch löschen (forciert, auch ungemergte) +git branch -D feature-login + +# Remote-Branch löschen +git push origin --delete feature-login +``` + +--- + +## Merging + +```bash +# Branch in aktuellen Branch mergen +git merge feature-login + +# Merge ohne Fast-Forward (behält Branch-Historie) +git merge --no-ff feature-login + +# Merge abbrechen (bei Konflikten) +git merge --abort + +# Merge-Konflikte anzeigen +git diff --name-only --diff-filter=U +``` + +--- + +## Rebasing + +```bash +# Aktuellen Branch auf main rebasen +git rebase main + +# Interaktives Rebase (letzte 3 Commits) +git rebase -i HEAD~3 + +# Rebase abbrechen +git rebase --abort + +# Nach Konfliktlösung fortfahren +git rebase --continue + +# Einzelnen Commit überspringen +git rebase --skip +``` + +--- + +## Remote-Repositories + +```bash +# Remote-Repositories anzeigen +git remote -v + +# Neues Remote hinzufügen +git remote add origin https://github.com/user/repo.git + +# Remote-URL ändern +git remote set-url origin https://github.com/user/neues-repo.git + +# Remote entfernen +git remote remove origin + +# Remote umbenennen +git remote rename origin upstream +``` + +--- + +## Push & Pull + +```bash +# Änderungen pushen +git push origin main + +# Ersten Push mit Upstream setzen +git push -u origin main + +# Danach reicht: +git push + +# Force-Push (Vorsicht!) +git push --force +# Sicherer: +git push --force-with-lease + +# Änderungen holen und mergen +git pull + +# Änderungen holen ohne Merge +git fetch + +# Alle Remotes fetchen +git fetch --all + +# Mit Rebase statt Merge +git pull --rebase +``` + +--- + +## Stashing (Änderungen zwischenspeichern) + +```bash +# Aktuelle Änderungen stashen +git stash + +# Stash mit Beschreibung +git stash save "Arbeit an Feature X" + +# Auch untracked Dateien stashen +git stash -u + +# Stash-Liste anzeigen +git stash list + +# Letzten Stash anwenden und behalten +git stash apply + +# Letzten Stash anwenden und löschen +git stash pop + +# Bestimmten Stash anwenden +git stash apply stash@{2} + +# Stash löschen +git stash drop stash@{0} + +# Alle Stashes löschen +git stash clear + +# Stash als neuen Branch +git stash branch neuer-branch +``` + +--- + +## Historie & Logs + +```bash +# Commit-Historie anzeigen +git log + +# Kompakte Ansicht +git log --oneline + +# Mit Graph +git log --oneline --graph --all + +# Letzte n Commits +git log -5 + +# Commits eines Autors +git log --author="Max" + +# Commits in Zeitraum +git log --since="2024-01-01" --until="2024-12-31" + +# Commits mit bestimmtem Text +git log --grep="bugfix" + +# Änderungen in Datei verfolgen +git log -p datei.txt + +# Wer hat welche Zeile geändert +git blame datei.txt + +# Kurze Statistik +git log --stat + +# Änderungen pro Autor +git shortlog -sn +``` + +--- + +## Rückgängig machen + +```bash +# Unstaged Änderungen verwerfen +git checkout -- datei.txt +# oder (neuere Syntax) +git restore datei.txt + +# Staged Datei zurück zu unstaged +git reset HEAD datei.txt +# oder +git restore --staged datei.txt + +# Letzten Commit rückgängig (behält Änderungen) +git reset --soft HEAD~1 + +# Letzten Commit rückgängig (verwirft Änderungen) +git reset --hard HEAD~1 + +# Zu bestimmtem Commit zurück +git reset --hard abc1234 + +# Commit rückgängig machen (neuer Commit) +git revert abc1234 + +# Alle lokalen Änderungen verwerfen +git checkout . +git clean -fd +``` + +--- + +## Tags + +```bash +# Alle Tags anzeigen +git tag + +# Lightweight Tag erstellen +git tag v1.0.0 + +# Annotated Tag mit Nachricht +git tag -a v1.0.0 -m "Version 1.0.0 Release" + +# Tag für älteren Commit +git tag -a v0.9.0 abc1234 -m "Nachträglicher Tag" + +# Tags pushen +git push origin v1.0.0 + +# Alle Tags pushen +git push origin --tags + +# Tag löschen (lokal) +git tag -d v1.0.0 + +# Tag löschen (remote) +git push origin --delete v1.0.0 + +# Zu Tag wechseln +git checkout v1.0.0 +``` + +--- + +## Cherry-Pick + +```bash +# Einzelnen Commit in aktuellen Branch übernehmen +git cherry-pick abc1234 + +# Mehrere Commits +git cherry-pick abc1234 def5678 + +# Cherry-Pick ohne Commit (nur Änderungen übernehmen) +git cherry-pick -n abc1234 + +# Bei Konflikten fortfahren +git cherry-pick --continue + +# Cherry-Pick abbrechen +git cherry-pick --abort +``` + +--- + +## Suchen + +```bash +# In Dateien suchen +git grep "suchbegriff" + +# Mit Zeilennummern +git grep -n "suchbegriff" + +# In bestimmtem Commit suchen +git grep "suchbegriff" abc1234 + +# Commit finden, der einen Bug eingeführt hat +git bisect start +git bisect bad # Aktueller Commit ist kaputt +git bisect good abc1234 # Dieser Commit war noch OK +# Git führt dich durch die Commits +git bisect reset # Beenden +``` + +--- + +## Aufräumen + +```bash +# Untracked Dateien anzeigen +git clean -n + +# Untracked Dateien löschen +git clean -f + +# Auch Verzeichnisse +git clean -fd + +# Auch ignorierte Dateien +git clean -fdx + +# Nicht mehr existierende Remote-Branches entfernen +git fetch --prune + +# Alte Objekte aufräumen +git gc + +# Aggressive Aufräumung +git gc --aggressive +``` + +--- + +## Submodules + +```bash +# Submodule hinzufügen +git submodule add https://github.com/user/lib.git libs/lib + +# Submodules beim Klonen initialisieren +git clone --recurse-submodules https://github.com/user/repo.git + +# Submodules nachträglich initialisieren +git submodule init +git submodule update + +# Alle Submodules aktualisieren +git submodule update --remote + +# Submodule entfernen +git submodule deinit libs/lib +git rm libs/lib +``` + +--- + +## Nützliche Kombinationen + +```bash +# Letzten Commit-Hash anzeigen +git rev-parse HEAD + +# Aktuellen Branch-Namen anzeigen +git branch --show-current + +# Anzahl Commits zählen +git rev-list --count HEAD + +# Alle Dateien eines Commits auflisten +git diff-tree --no-commit-id --name-only -r abc1234 + +# Änderungen seit letztem Tag +git log $(git describe --tags --abbrev=0)..HEAD --oneline + +# Dateien im Staging-Bereich anzeigen +git diff --cached --name-only + +# Lokale Branches ohne Remote löschen +git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D +``` + +--- + +## .gitignore Beispiele + +```gitignore +# Verzeichnisse +node_modules/ +vendor/ +.idea/ +.vscode/ + +# Dateitypen +*.log +*.tmp +*.cache + +# Spezifische Dateien +.env +.DS_Store +Thumbs.db + +# Ausnahmen (nicht ignorieren) +!wichtig.log + +# Muster +**/logs/ +debug[0-9].log +``` + +--- + +## Häufige Workflows + +### Feature-Branch Workflow + +```bash +git checkout main +git pull +git checkout -b feature/neue-funktion +# ... Änderungen ... +git add . +git commit -m "Neue Funktion implementiert" +git push -u origin feature/neue-funktion +# Pull Request erstellen, dann: +git checkout main +git pull +git branch -d feature/neue-funktion +``` + +### Hotfix Workflow + +```bash +git checkout main +git pull +git checkout -b hotfix/kritischer-bug +# ... Fix ... +git commit -am "Kritischen Bug behoben" +git checkout main +git merge hotfix/kritischer-bug +git tag -a v1.0.1 -m "Hotfix Release" +git push origin main --tags +git branch -d hotfix/kritischer-bug +``` + +### Rebase vor Merge + +```bash +git checkout feature-branch +git fetch origin +git rebase origin/main +# Konflikte lösen falls nötig +git push --force-with-lease +``` + +--- + +## Tipps + +- **Commit oft**: Kleine, fokussierte Commits sind besser als große. +- **Aussagekräftige Nachrichten**: Was wurde geändert und warum? +- **Branches nutzen**: Nie direkt auf main/master entwickeln. +- **Vor Push prüfen**: `git log origin/main..HEAD` zeigt ausstehende Commits. +- **Backup vor Reset**: Bei `--hard` gehen Änderungen verloren! +- **Force-Push vermeiden**: Nur auf eigenen Feature-Branches. + +--- + +*Erstellt: 04 Februar 2026*