Altro
Come cambiare l'autore del commit per un commit specifico?
Voglio cambiare l'autore di uno specifico commit nella storia. Non è l'ultimo commit.
So di questa domanda - Come posso cambiare l'autore di un commit in git?
Ma sto pensando a qualcosa, dove identifico il commit per hash o short-hash.
1928
3
Il rebase interattivo parte da un punto precedente nella storia rispetto al commit che devi modificare (
git rebase -i
). Nella lista dei commit in fase di rebase, cambia il testo dapick
aedit
accanto all'hash di quello che vuoi modificare. Poi quando git ti chiede di cambiare il commit, usa questo:Per esempio, se la tua cronologia di commit è
A-B-C-D-E-F
conF
comeHEAD
, e vuoi cambiare l'autore diC
eD
, allora dovresti...git rebase -i B
(ecco un esempio di ciò che vedrete dopo l'esecuzione del comandogit rebase -i B
)A
, usagit rebase -i --root
C
eD
dapick
aedit
C
.git commit --amend --author="Nome Autore "
git rebase --continue
.D
.git commit --amend --author="Nome Autore "
di nuovogit rebase --continue
.git push -f
per aggiornare la tua origine con i commit aggiornati.Le risposte nella domanda a cui ti sei collegato sono buone risposte e coprono la tua situazione (l'altra domanda è più generale poiché implica la riscrittura di più commit).
Come scusa per provare
git filter-branch
, ho scritto uno script per riscrivere il nome dell'autore e/o l'email dell'autore per un dato commit:Quando si fa
git rebase -i
c'è questo pezzo interessante nel documento:Se vuoi piegare due o più commit in uno solo, sostituisci il comando
"pick"
per il secondo e i successivi commit con"squash"
o"fixup"
. Se i commit hanno autori diversi, il commit ripiegato sarà attribuito all'autore del primo commit. Il messaggio di commit suggerito per il folded commit è la concatenazione dei messaggi di commit del primo commit e di quelli con il comando"squash"
, ma omette i messaggi di commit dei commit con il comando"fixup"
.A-B-C-D-E-F
,B
eD
(= 2 commit),allora puoi fare:
git config user.name "Corretto nuovo nome"
git config user.email "correct@new.email"
git commit --allow-empty -m "empty"
git rebase -i B^
B^
seleziona il genitore diB
.pick
insquash
per quelli.Esempio di cosa ti darà
git rebase -i B^
:cambialo in:
Ti chiederà di modificare i messaggi:
e puoi semplicemente rimuovere le prime righe.