# Git

## Allgemeines
Git arbeitet grob mit drei Bereichen:

1. Working Directory → deine aktuellen Dateien (wo du arbeitest)
2. Staging Area (Index) → „Warteliste“ für den nächsten Commit
3. Repository → gespeicherte Commits (Historie)


## Löschen aller auf deleted stehenden Dateien mit einem Rutsch

Wenn Git sagt, Dateien sind „deleted“, dann:

* sie sind im Working Directory gelöscht
* aber noch nicht gestaged

`git ls-files --deleted -z | xargs -0 git rm`


## Unnötige Dateien entfernen (inkl. aus der Historie)
### Große Dateien finden
`git rev-list --objects --all | sort -k 2 > all-files.txt`

`git gc && git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -n | tail -20`

## Alte Branches löschen
### Lokale Branches, die nicht mehr gebraucht werden
`git branch -d <branch>`

### Remote-Branches löschen
`git push origin --delete <branch>`

## Git-Objekte bereinigen (lokal)

Wenn man keine History ändern willst, sondern einfach „aufräumen“ will:

`git gc --prune=now --aggressive`

## Einzelne Commits aus den letzten Commits entfernen
z.B die letzten 5
Mit `git rebase -i` (interaktiv)

Man kann die letzten Commits durchgehen und gezielt entfernen oder ändern
`git rebase -i HEAD~5`

Es öffnet sich ein Editor mit so etwas wie:

```pick a1b2c3 Fix typo
pick d4e5f6 Add logo
pick 123abc Large debug file (REMOVE THIS)
pick 789def Update README
```

Ändere pick → drop oder lösche die Zeile:
`drop 123abc Large debug file`

Nur bei Commits, die **nicht bereits gepusht wurden**, ist das gefahrlos. Wenn sie **bereits gepusht** sind, muss man danach `git push --force` machen.

## Einzelne Datei aus einem Commit wiederherstellen

git restore --source=<hash> <File>

## Einzelnen Commit wiederherstellen
- git log --oneline
- git reset hash

https://tiny-tool.de/git-cheat-sheet-die-wichtigsten-git-befehle/