finden Als below von ecdpalma erwähnt, git 1.7.12+ (August 2012) wurde erweitert die Option --root
für git rebase
:
"git rebase [-i] --root $tip
" kann jetzt verwendet werden, um den gesamten Verlauf, der zu "$tip
" führt, auf das Root-Commit umzuschreiben.
Das neue Verhalten zunächst discussed here war:
Ich persönlich denke, „git rebase -i --root
“ sollte nur vorgenommen werden, ohne arbeiten „--onto
“ zu erfordern und lassen Sie „Bearbeiten“ auch die erste in der Geschichte.
Es ist verständlich, dass sich niemand darum gekümmert hat, denn die Leute schreiben viel seltener am Anfang der Geschichte als sonst.
Die patch followed.
(ursprüngliche Antwort, Februar 2010)
Wie in den Git FAQ erwähnt (und diesen SO question), die Idee ist:
- neu erstellen temporären Zweig
- es die Rewind commit Sie wollen ändern mit
git reset --hard
- Ändern Sie das Commit (es wäre Spitze des aktuellen HEAD, und Sie können Ändern Sie den Inhalt einer Datei)
Rebase Zweig auf der Oberseite geändert begehen, mit:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Der Trick die Informationen, die Sie nicht durch eine später wieder eingeführt entfernen wollen sicher sein, ist verpflichten woanders in deiner Datei. Wenn Sie das vermuten, dann müssen Sie filter-branch --tree-filter
verwenden, um sicherzustellen, dass der Inhalt dieser Datei keine der sinnvollen Informationen enthält.
In beiden Fällen überschreiben Sie den SHA1 jedes Commits. Seien Sie also vorsichtig, wenn Sie bereits den Zweig veröffentlicht haben, an dem Sie den Inhalt ändern.Sie sollten es wahrscheinlich nicht tun, es sei denn, Ihr Projekt ist noch nicht öffentlich und andere Leute haben die Arbeit nicht von den Commits, die Sie gerade umschreiben wollen, abhängig gemacht.
auf OS X Mountain Lion mit dem System installierten git 1.7.9.6 (Apple-Git-31.1) verwenden kann, setze ich '' zu sei der gleiche Hash, den ich im Befehl 'git reset --hard' verwendet habe. Abgesehen von dieser kleinen Änderung funktioniert das wunderbar, um die Autorinformationen über alle Commits in einem Repo zu aktualisieren. –
berto
können Sie Beispiel geben, was $ Tip sein sollte. 'git rebase -i --root' arbeitete für mich. –
@ RémiBenoit Ja, '$ tip' kann ein beliebiges Commit sein, das du willst. 'Master' (bedeutet' Master HEAD' Commit) ist in Ordnung. – VonC