2010-05-27 15 views
69

ho commesso un mucchio di commit a un progetto su Github, però mi sono reso conto che non avevo impostato la corretta email e committer nome completo sul computer Attualmente sto usando per fare i miei commit e quindi gli avatar degli utenti e l'indirizzo email non ci sono.Git, riscrivere precedente commettere i nomi utente e le email

Come posso riscrivere tutti i passati commettere posta elettronica e nomi utente?

+6

possibile duplicato di [Come faccio a cambiare l'autore di un commit in Git?] (Http://stackoverflow.com/questions/750172/how-do-i-change-the-author-of-a-commit -in-git) – givanse

risposta

108

È possibile utilizzare questo alias in modo da poter fare:

git change-commits GIT_AUTHOR_NAME "old name" "new name" 

o per gli ultimi 10 commit:

git change-commits GIT_AUTHOR_EMAIL "[email protected]" "[email protected]" HEAD~10..HEAD 

Alias:

change-commits = "!f() { VAR=$1; OLD=$2; NEW=$3; shift 3; git filter-branch --env-filter \"if [[ \\\"$`echo $VAR`\\\" = '$OLD' ]]; then export $VAR='$NEW'; fi\" [email protected]; }; f " 

Fonte: https://github.com/brauliobo/gitconfig/blob/master/configs/.gitconfig

La speranza è utile.

+1

Grazie, funziona perfettamente! – josal

+1

Non ho ricevuto i miei tag, ma funziona. Grazie. – Bharat

+5

anche 'git cambiamento impegna GIT_COMMITTER_EMAIL "[email protected]" "[email protected]"' per cambiare l'email committer. –

50

La soluzione è già presente: Change the author and committer name and e-mail of multiple commits in Git

Vale a dire,

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 
+2

non sarebbe questo cambiare il nome dell'autore per tutti i commit (tutta la storia) del ramo? – hasen

+2

Sì, questo cambierebbe tutti i commit alle nuove informazioni dell'autore. Si prega di indicare – ewall

+2

domande come duplicati, invece di copiare incollare la risposta. – givanse

20

Se si è già spinto alcuni dei vostri commit al repository pubblico, si fa non vuole fare questo, oppure farebbe una versione alternativa della storia del maestro che altri potrebbero aver usato. "Non attraversare i flussi ... Sarebbe male ..."

Detto questo, se sono solo i commit che hai fatto al tuo repository locale, allora risolvilo in tutti i modi prima di spingere fino a il server. È possibile utilizzare il comando git filter-branch con l'opzione --commit-filter, quindi edita solo commit che corrispondono alla vostra informazioni errate, come questo:

git filter-branch --commit-filter ' 
     if [ "$GIT_AUTHOR_EMAIL" = "[email protected]_host.local" ]; 
     then 
       GIT_AUTHOR_NAME="Your Name Here (In Lights)"; 
       GIT_AUTHOR_EMAIL="[email protected]_host.com"; 
       git commit-tree "[email protected]"; 
     else 
       git commit-tree "[email protected]"; 
     fi' HEAD 
7

Dopo aver applicato la risposta di Olivier Verdier:

git filter-branch -f --env-filter \ 
"GIT_AUTHOR_NAME='Newname'; GIT_AUTHOR_EMAIL='newemail'; \ 
GIT_COMMITTER_NAME='committed-name'; GIT_COMMITTER_EMAIL='committed-email';" HEAD 

... per spingere la storia cambiato sull'uso originale repository:

git push origin +yourbranch 

Il comando sopra (nota la plus) forze riscrivere la storia anche sul repository originale. Usare con cautela!

+0

Ha funzionato per me, inoltre ha riscritto correttamente la cronologia dell'origine. – Xeverous

+0

Questo sta per riscrivere TUTTI i commit, indipendentemente da chi l'ha scritto. Usare con cautela. –

Problemi correlati