Come menzionato da ecdpalmabelow, git 1.7.12+ (Agosto 2012) ha migliorato l'opzione --root
per git rebase
:
"git rebase [-i] --root $tip
" ora può essere utilizzato per riscrivere tutta la cronologia che porta a "$tip
" fino al commit radice.
Questo nuovo comportamento è stato inizialmente discussed here:
Personalmente ritengo "git rebase -i --root
" dovrebbe essere fatto per funzionare senza richiedere "--onto
" e lasciare che "modifica", anche il primo nella storia.
È comprensibile che nessuno si sia preoccupato, poiché le persone si riscrivono molto meno spesso all'inizio della storia piuttosto che altrimenti.
patch followed.
(risposta originale, febbraio 2010)
Come menzionato nel Git FAQ (e questo SO question), l'idea è:
- Crea nuovo ramo temporaneo
- riavvolgerlo alla ti impegni a cambiare usando
git reset --hard
- Cambia quel commit (sarebbe superiore al corrente HEAD, e tu puoi modificare il contenuto di qualsiasi file)
ramo Rebase in cima cambiato impegnarsi, utilizzando:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Il trucco è quello di essere che le informazioni che si desidera rimuovere non è reintrodotto da una successiva commettere da qualche altra parte nel tuo file. Se si sospetta che, quindi è necessario utilizzare filter-branch --tree-filter
per assicurarsi che il contenuto di tale file non contenga in alcun commit le informazioni sensibili.
In entrambi i casi, si finisce per riscrivere lo SHA1 di ogni commit, quindi fare attenzione se si è già pubblicato il ramo di cui si sta modificando il contenuto.Probabilmente non dovresti farlo a meno che il tuo progetto non sia ancora pubblico e altre persone non abbiano basato il lavoro sui commit che stai per riscrivere.
su OS X Mountain Lion con git installato il sistema-1.7.9.6 (Apple Git-31.1) I set '' per essere lo stesso hash che ho usato nel comando 'git reset --hard'. A parte questo piccolo cambiamento, questo funziona magnificamente per aggiornare le informazioni dell'autore su tutti i commit in un repository. –
berto
puoi fornire un esempio di cosa dovrebbe essere $ tip. 'git rebase -i --root' ha funzionato per me. –
@ RémiBenoit yes, '$ tip' può essere qualsiasi commit desiderato. 'master' (che significa 'master HEAD' commit) va bene. – VonC