2014-04-10 5 views
17

Ho utilizzato git init per creare un nuovo repository, quindi effettuato tre commit. Ora voglio rebase per tornare indietro e modificare il mio primo commit, ma se lo faccio git rebase -i HEAD~3 si lamenta! Se provo lo stesso con HEAD~2 allora funziona un po ', ma mi permette solo di riorganizzare gli ultimi due commit.Come faccio a rebase il primo commit?

Come faccio a fare riferimento al "commit prima che ci fossero dei commit" o tornare indietro e inserire un commit vuoto?

+0

Darnit, dup di http://stackoverflow.com/questions/11987914/how-do-i-reword-the-very-first-git-commit-message – lxs

risposta

28

Il modo più semplice, con un recente-abbastanza Git (questo è stato fuori per molto tempo quindi si dovrebbe avere questo):

git rebase -i --root 

L'altro modo semplice, come twalberg noted in a comment, è quello di utilizzare git checkout --orphan impostare fino a fare una nuova radice commettere, che è possibile copiare i vecchi commit in cima. (Questo è ciò che rebase -i --root finisce per fare internamente comunque.)

0

Per quanto posso dire, non è possibile fare riferimento al "commit prima che ci fossero dei commit". Né è facile aggiungere un commit senza un genitore. Tuttavia è possibile modificare l'iniziale impegnarsi poi scegliere l'originale indietro:

$ git log --pretty=oneline 
333333 commit three 
222222 commit two 
111111 commit one 
$ git reset --hard 111111 
$ rm -fr * 
$ git commit -a --amend --allow-empty -m "Initial commit" 
$ git cherry-pick 111111 222222 333333 
$ git log --pretty=oneline 
333333 commit three 
222222 commit two 
111111 commit one 
2c5e01 Initial commit 
+0

In realtà, con nuove versioni sufficienti di 'git', puoi' git checkout --orphan newbranch' per creare un nuovo ramo il cui primo commit non avrà genitori ... Da lì, un 'git rebase --onto' o un serie di 'git cherry-pick' (NB non credo che' git pick 'è una cosa ...) potrebbe essere usato per copiare altri commit non-root su ... – twalberg