From 8ac370e5a706c6d880deb1e00db8c3313b6cb5eb Mon Sep 17 00:00:00 2001 From: Sven Riwoldt Date: Tue, 28 Apr 2026 18:46:04 +0200 Subject: [PATCH] =?UTF-8?q?Git=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Git.md | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Git.md 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.