diff --git a/Git.md b/Git.md new file mode 100644 index 0000000..05ce035 --- /dev/null +++ b/Git.md @@ -0,0 +1,57 @@ +# 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.