# 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 ` ### Remote-Branches löschen `git push origin --delete ` ## 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.