El problema es conocido, a veces, al hacer un commit, se nos olvida configurar bien nuestro usuario o simplemente usamos la cuenta equivocada (si usamos varios login, o servers para git).
Corregir esto en git es muy sencillo, teniendo en cuenta dos escenarios diferentes:
- Cambiar el autor del último commit
- Cambiar el autor de uno o varios commits más atrás del HEAD
Corregir el autor en el ultimo commit
Si el error está solo en el commit más reciente, es muy sencillo. Usaremos el comando –amend (modificar):
git commit --amend --author="Jose PEREZ MARTINEZ <miemail@midominio.com>"
Nota Importante
Es recomendable incluir el correo electrónico junto al nombre, siguiendo el formato "Nombre Apellido <email>".
Una vez hecho esto, ya hemos corregido el autor del último commit, pero, esa cambio está en nuestro repositorio local. Si queremos actualizar este commit en nuestro repositorio remoto y compartir el cambio necesitamos hacer esto:
git push --force
Corregir el autor en uno o varios commits antiguos
Si necesitas corregir el autor en varios commits que ya están en el historial, la herramienta a usar es git rebase -i (rebase interactivo). Este paso es más “complicado” que el anterior, porqué implica usar un editor para modificar la metainformación de los commits e indicarle a git que queremos hacer para cada commit, pero vamos paso a paso.
Lo primero, necesitamos saber qué commit queremos modificar o si son varios en lote, saber cual es el punto de inicio en el historial. Pero, ¿qué siginifica saber qué commit es? Pues buscar el identificador que usa git, que se llama código Hash. Este código es una cadena alfanumérica que tiene un formato más largo y otro más corte y es único (puedes leer más en esta entrada: Git Hash Commit, identificando commits)
Supongamos que has consultado el historial de git y el hash de tu commit base es 70aeebd, entonces ejecutar el siguiente comando:
git rebase -i -p 70aeebd
Se abrirá el editor por defecto que tengas configurado en git (si no lo has configurado, pues puede ser vi, vim, emacs, notepad, …. depende de tu sistema). En mi caso, por ejemplo tendrá un pinta como esto:
pick 2231360 some old commit
pick ee2adc2 Adds new feature
# Rebase 2cf755d..ee2adc2 onto 2cf755d (9 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
En el archivo que se abre, verás una línea para cada commit que se va a procesar, comenzando con la palabra pick. Cambia la palabra pick por edit (o e) en cada commit al que quieras cambiarle el autor. Guarda y cierra el archivo. Git comenzará el proceso, pausándose en el primer commit marcado.
Cuando git encuentra una linea marcada para editar, para y ejecuta el comando git commit --amend. Una vez termine, debemos cerrar la sesión del rebase para continuar y enviar los cambios al servidor, ejecutamos:
git rebase --continue
Puede que tengas que repetir este paso alguna vez, según lo que necesite hacer git durante el proceso.
Al finalizar, debes hacer push:
git push --force
Con esto habriamos actualizado el autor en los commits que nos es necesario.