# Git ## Start - `git clone ` — Repository klonen - `git init` — neues Repository anlegen - `git remote add origin ` — Remote verbinden ## Stand ansehen - `git status -sb` — Kurzstatus mit Branch-Zeile - `git diff` — nicht gestagete Änderungen - `git diff --staged` — gestagete Änderungen - `git diff main...HEAD` — alles, was dieser Branch gegenüber main bringt - `git diff --stat` — nur Datei- und Zeilenzähler - `git log --oneline --graph --decorate -20` — kompakter Verlauf - `git log -p -- ` — Verlauf einer Datei mit Diffs - `git show ` — ein Commit im Detail ## Branch - `git switch ` — Branch wechseln - `git switch -c ` — Branch anlegen und wechseln - `git switch -` — zurück zum vorherigen Branch - `git branch -vv` — Branches mit Upstream und letztem Commit - `git branch -d ` — gemergten Branch löschen (`-D` erzwingt) ## Committen - `git add ` — Änderungen stagen - `git add -p` — Änderungen hunk-weise stagen - `git commit -m ""` — gestagete Änderungen committen - `git commit -- ` — nur diese Pfade committen - `git commit --amend --no-edit` — letzten Commit um die Staging-Area erweitern - `git commit --fixup ` — Fixup für späteres Autosquash ## Remote - `git fetch --all --prune` — alles holen, gelöschte Remote-Branches aufräumen - `git pull --rebase` — holen und eigene Commits obendrauf setzen - `git push -u origin ` — pushen und Upstream setzen - `git push --force-with-lease` — sicheres Force-Push, nie plain `--force` ## Rebase und Merge - `git rebase main` — Branch auf aktuellen main setzen - `git rebase -i --autosquash main` — interaktiv aufräumen - `git rebase --continue` — nach gelöstem Konflikt weiter - `git rebase --abort` — Rebase abbrechen, Ausgangszustand zurück - `git merge --no-ff ` — Merge-Commit erzwingen - `git merge --abort` — laufenden Merge abbrechen - `git cherry-pick ` — einzelnen Commit übernehmen ## Konflikte - `git diff --name-only --diff-filter=U` — konfliktbehaftete Dateien - `git checkout --ours ` — eigene Seite übernehmen - `git checkout --theirs ` — fremde Seite übernehmen - `git mergetool` — konfiguriertes Merge-Tool starten ## Rückgängig - `git restore ` — Datei auf HEAD zurücksetzen, Änderungen weg - `git restore --staged ` — unstagen, Änderungen behalten - `git reset --soft HEAD~1` — letzten Commit auflösen, Änderungen gestaged behalten - `git reset --hard ` — alles verwerfen, nicht rückholbar - `git revert ` — Commit durch Gegen-Commit aufheben - `git reflog` — Referenzverlauf, um verlorene Commits wiederzufinden ## Stash - `git stash push -m ""` — Änderungen wegpacken - `git stash push -u` — inklusive unversionierter Dateien - `git stash list` — Stashes anzeigen - `git stash pop` — letzten Stash zurückholen und entfernen - `git stash apply ` — anwenden, aber behalten ## Worktrees - `git worktree list` — alle Worktrees - `git worktree add ` — Worktree für bestehenden Branch - `git worktree add -b ` — Worktree mit neuem Branch - `git worktree remove ` — Worktree entfernen - `git worktree prune` — verwaiste Einträge aufräumen ## Suchen - `git grep -n ""` — im Arbeitsbaum suchen - `git log -S""` — Commits, die den Text einfügen oder entfernen - `git blame -L 40,60 ` — Zeilenbereich zuordnen - `git bisect start` — binäre Suche nach dem Fehler-Commit