Ich habe kürzlich festgestellt, dass die Projektdateien, die meine Texteditoren (zusammen mit etwas anderem Junk) verwenden, dem Git-Repository für das Projekt hinzugefügt wurden. Da sie eigentlich nicht Teil des Projekts sind, möchte ich sie entfernen, aber git rm
die alten Versionen werden nicht aus dem Repository entfernt, und ich konnte nichts anderes finden, das vielversprechend aussieht.
78
Antworten:
Das gewünschte Werkzeug ist
git filter-branch
. Seine Verwendung wird hier beschrieben , aber im Grunde:entfernt "my_file" aus jedem Commit.
Beachten Sie, dass dies jedes Commit neu schreibt. Wenn Sie also in ein Remote-Repository pushen, müssen Sie (a) das Update erzwingen, und (b) alle anderen, die von Ihnen gezogen haben, haben jetzt doppelte Commits (da Sie den Verlauf neu geschrieben haben) auf der
git rebase
Manpage beschrieben .quelle
--prune-empty
damit auch alle daraus resultierenden leeren Commits entfernt werden.git push --force
? @mipadiDies ist der Zweck
git filter-branch
, aber achten Sie darauf, dass sich Ihr Repo-Verlauf ändert und die Commit-Hashes nach dem Umschreiben des Verlaufs anders sind.Wenn Sie auch den Speicherplatz freigeben möchten, empfehle ich die Verwendung
git forget-blob
, dagit filter-branch
Git Ihre Datei allein nicht vergisst, da sie möglicherweise weiterhin von Fernbedienungen, Reflogs, Tags und dergleichen referenziert wird.git forget-blob main.c.swp
Weitere Informationen erhalten Sie hier
quelle