¿Cambiar el correo electrónico en Git commits?

Solía ​​tener el correo electrónico A como mi principal, pero ahora tengo el correo electrónico B como mi primario y no uso A en absoluto. Cambié mi correo electrónico primario de github a B, pero olvidé actualizar mi .gitconfig localmente, por lo que todo el patch para todas mis confirmaciones aún dice que fue creado por un usuario con correo electrónico A.

Debido a esto, ninguno de mis commits está registrado en mis "Contribuciones" en github.

La respuesta oficial de github a esto es agregar el correo electrónico A a mi count github, y mis contribuciones se rebuildán automáticamente.

Sin embargo, me gustaría borrar el correo electrónico A de cada plataforma que puedo, ¿hay alguna manera de cambiar el "compromiso" de cada compromiso que he hecho para enviar un correo electrónico a B?

git filter-branch debería poder hacer esto por usted; esencialmente reescribe todo el historial de confirmaciones de la twig con los mismos SHA1.

Hay un script de ejemplo en Github que demuestra cómo hacer esto; es corto, así que lo estoy reproduciendo aquí.

 #!/bin/sh git filter-branch --env-filter ' OLD_EMAIL="your-old-email@example.com" CORRECT_NAME="Your Correct Name" CORRECT_EMAIL="your-correct-email@example.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --tag-name-filter cat -- --branches --tags 

Será necesario forzar la inserción de la twig filtrada, ya que ha cambiado la historia en ella. Si alguien comparte su sucursal, eso hará que su historia y la tuya no coincidan, necesitará que todos sus queueboradores vuelvan a tirar de la sucursal editada. Si han estado trabajando en la antigua sucursal y se han comprometido con ella, pueden seleccionarla en la nueva sucursal.

Es posible que desee hacerlo más fácil al crear una nueva twig y actualizar el historial allí, luego dejar que todos lo extraigan. En ese momento todos pueden estar de acuerdo en que esta es la nueva twig maestra y trabajar sobre esa base, o simplemente hacer que todos eliminen su copy del antiguo maestro y renombren la nueva twig a la master .