59 lines
1.6 KiB
Markdown
59 lines
1.6 KiB
Markdown
# 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.
|