# Git Cheat Sheet

## Inhaltsverzeichnis

- [Konfiguration](#konfiguration)
- [Repository anlegen](#repository-anlegen)
- [Status & History](#status--history)
- [Staging & Commits](#staging--commits)
- [Branches](#branches)
- [Mergen & Rebase](#mergen--rebase)
- [Remotes](#remotes)
- [Push & Pull](#push--pull)
- [Dateien löschen / umbenennen](#dateien-löschen--umbenennen)
- [Undo & Restore](#undo--restore)
- [Tags](#tags)
- [Nützliche Kurzbefehle](#nützliche-kurzbefehle)

## Konfiguration

- Globalen User setzen  
  `git config --global user.name "Dein Name"`  
  `git config --global user.email "du@example.com"`

- Aktuelle Config anzeigen  
  `git config --list`

## Repository anlegen

- Neues Repo im aktuellen Ordner  
  `git init`

- Vorhandenes Repo klonen  
  `git clone <url>`

## Status & History

- Status der Arbeitskopie  
  `git status`

- Änderungen vergleichen  
  `git diff`              Arbeitskopie vs. Index  
  `git diff --staged`     Index vs. letztem Commit

- Commit-Historie  
  `git log`  
  `git log --oneline --graph --all`

## Staging & Commits

- Datei zum Index hinzufügen  
  `git add <datei>`

- Alle Änderungen hinzufügen  
  `git add .`

- Datei aus dem Index entfernen, aber nicht löschen  
  `git reset <datei>`

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

- Letzten Commit überschreiben, nur lokal verwenden  
  `git commit --amend`

## Branches

- Alle Branches anzeigen  
  `git branch`

- Neuen Branch erstellen  
  `git branch <name>`

- In Branch wechseln  
  `git switch <name>`  
  oder klassisch  
  `git checkout <name>`

- Branch erstellen und direkt wechseln  
  `git switch -c <name>`

- Branch löschen lokal  
  `git branch -d <name>`  
  `git branch -D <name>`

## Mergen & Rebase

- Branch in aktuellen Branch mergen  
  `git merge <branch>`

- Interaktives Rebase zum Aufräumen von Commits  
  `git rebase -i HEAD~<n>`

- Rebase abbrechen  
  `git rebase --abort`

- Merge-Konflikte prüfen  
  `git status`  
  `git diff`

## Remotes

- Remotes anzeigen  
  `git remote -v`

- Remote hinzufügen  
  `git remote add origin <url>`

- Remote-URL ändern  
  `git remote set-url origin <url>`

- Remote entfernen  
  `git remote remove <name>`

## Push & Pull

- In Remote-Branch pushen  
  `git push origin <branch>`

- Upstream setzen und direkt pushen  
  `git push -u origin <branch>`

- Änderungen vom Remote holen und mergen  
  `git pull`

- Nur Daten holen, nicht mergen  
  `git fetch`

## Dateien löschen / umbenennen

- Datei löschen und Commit vorbereiten  
  `git rm <datei>`

- Datei umbenennen oder verschieben  
  `git mv <alt> <neu>`

## Undo & Restore

- Datei auf HEAD zurücksetzen, nur Arbeitskopie  
  `git restore <datei>`

- Datei aus Index entfernen, aber in Arbeitskopie behalten  
  `git restore --staged <datei>`

- Alles auf HEAD zurücksetzen, nicht committed  
  `git restore .`

- Einzelne Datei aus älterem Commit holen  
  `git checkout <commit> -- <datei>`

- Branch hart auf Commit zurücksetzen, destruktiv  
  `git reset --hard <commit>`

## Tags

- Tag erstellen lightweight  
  `git tag <name>`

- Annotierten Tag erstellen  
  `git tag -a <name> -m "Beschreibung"`

- Tags anzeigen  
  `git tag`

- Tag pushen  
  `git push origin <tag>`

## Nützliche Kurzbefehle

- Letzten Commit anzeigen  
  `git show`

- Ignorierte Dateien mit anzeigen  
  `git status --ignored`

- Stash verwenden  
  `git stash`  
  `git stash list`  
  `git stash apply`  
  `git stash drop`