Wie bereits von ecdpalma unter , git 1.7.12+ (August 2012) hat die Option erweitert --root
pour git rebase
:
" git rebase [-i] --root $tip
" kann nun verwendet werden, um die gesamte Geschichte, die zu "" führt, umzuschreiben. $tip
"bis hin zur Root-Übertragung.
Dieses neue Verhalten war zunächst hier diskutiert :
Ich persönlich denke " git rebase -i --root
" sollte so gestaltet werden, dass es einfach funktioniert, ohne dass man " --onto
"und lässt Sie sogar den ersten Eintrag in der Historie "bearbeiten".
Es ist verständlich, dass sich niemand daran gestört hat, da die Menschen am Anfang der Geschichte viel seltener umschreiben als sonst.
El Patch folgt .
(Originalantwort, Februar 2010)
Wie bereits in der Git-FAQ (und diese SO Frage ), ist die Idee:
- Neue temporäre Verzweigung erstellen
- Spulen Sie zu der Übergabe zurück, die Sie ändern möchten, indem Sie
git reset --hard
- Ändern Sie diesen Commit (er würde über dem aktuellen HEAD stehen, und Sie können den Inhalt jeder Datei ändern)
-
Den Zweig auf die geänderte Übergabe zurücksetzen, mit:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Der Trick besteht darin, sicherzustellen, dass die Informationen, die Sie entfernen wollen, nicht durch eine spätere Übertragung an anderer Stelle in Ihrer Datei wieder eingefügt werden. Wenn Sie das vermuten, dann müssen Sie filter-branch --tree-filter
um sicherzustellen, dass der Inhalt dieser Datei keine sensiblen Informationen enthält.
In beiden Fällen wird die SHA1 jedes Commits neu geschrieben. Seien Sie also vorsichtig, wenn Sie den Zweig, dessen Inhalt Sie ändern wollen, bereits veröffentlicht haben. Sie sollten es wahrscheinlich nicht tun, es sei denn, Ihr Projekt ist noch nicht öffentlich und andere Leute haben noch keine Arbeit auf den Commits aufgebaut, die Sie umschreiben wollen.