Cambiare primo commit del progetto con Git? [duplicare]
-
20-09-2019 - |
Domanda
Questa domanda ha già una risposta qui:
- Modifica la radice commettere in Git? 5 risposte
voglio cambiare qualcosa nel primo commit del mio progetto con fuori perdendo tutti i commit successive. Esiste un modo per fare questo?
Ho elencato accidentalmente la mia email prime in un commento all'interno del codice sorgente, e mi piacerebbe cambiare come mi sto spammato dal bots indicizzazione GitHub.
Soluzione
Come già detto da ecdpalma sotto , git 1.7.12+ (agosto 2012) ha migliorato l'opzione per la --root
git rebase
:
"git rebase [-i] --root $tip
" può ora essere utilizzato per riscrivere tutta la storia che porta a "$tip
" fino alla radice commit.
Questo nuovo comportamento è stato inizialmente discusso qui :
Personalmente ritengo "
git rebase -i --root
" dovrebbe essere fatto per funzionare senza richiedere "--onto
" e lasciare che "modifica", anche il primo nella storia.
E 'comprensibile che nessuno si preoccupa, come le persone sono molto meno spesso riscrivere vicino fin dall'inizio della storia rispetto a quello altrimenti.
La patch seguito .
(risposta originale, febbraio 2010)
Come indicato nella Git FAQ (e questo domanda SO ), l'idea è:
- Crea nuovo ramo temporaneo
- riavvolgerlo per il commit che si desidera modificare utilizzando
git reset --hard
- Cambia che commit (sarebbe superiore della testa corrente, ed è possibile modificare il contenuto di qualsiasi file)
-
REBASE ramo 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 viene reintrodotto da una successiva commettere qualche altra parte nel file. Se si sospetta che, allora è necessario utilizzare filter-branch --tree-filter
per assicurarsi che il contenuto di tale file non contiene in alcun commettere l'informazioni sensibili.
In entrambi i casi, si finisce per riscrivere la SHA1 di ogni commit, quindi fate attenzione se avete già pubblicato il ramo si sta modificando il contenuto del. Probabilmente non dovrebbe fare a meno che il progetto non è ancora pubblica e le altre persone non hanno basato il lavoro fuori i commit che si sta per riscrivere.
Altri suggerimenti
Come indicato nel Note 1.7.12 uscita , si può usare
$ git rebase -i --root
git rebase -i
consente di modificare facilmente qualsiasi commit precedenti, ad eccezione della radice commit . I comandi seguenti mostrano come fare questa operazione manualmente.
# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`
# switch to a new branch pointing at the first commit
git checkout -b new-root root
# make any edits and then commit them with:
git commit --amend
# check out the previous branch (i.e. master)
git checkout @{-1}
# replace old root with amended version
git rebase --onto new-root root
# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue
# delete the branch "new-root"
git branch -d new-root
# delete the tag "root"
git tag -d root
Se si desidera modificare solo la prima di impegnarsi, si può provare git rebase e modificare il commit, che è simile a questo post: Come modificare un determinato impegnarsi in git?
E se si desidera modificare tutti i commit che contengono l'e-mail prima, filtro-ramo è la scelta migliore. V'è un esempio di come cambiare l'indirizzo di posta elettronica a livello globale sul libro Pro Git , e si può trovare questo link utile http://git-scm.com/book/en/Git-Tools-Rewriting-History