Es común estar en una situación donde el nombre del autor de los commits en la historia de GIT no es exactamente el que se desea mantener por ello se busca renombrar el autor de los commits pasados en GIT.
En este tutorial se muestran dos métodos para renombrar el autor de los commits pasados, sin embargo, es importante mencionar que esto sobreescribe la historia de Git.
ADVERTENCIA: Estos cambios sobrescriben la historia del proyecto.
Renombrar el autor en un proyecto de Git con sólo un autor
Cuando se tiene solo un autor en la historia, se puede ejecutar un filtro.
1 2 3 4 |
git filter-branch --commit-filter ' GIT_AUTHOR_NAME="[nuevo nombre]" GIT_COMMITTER_NAME="[nuevo nombre]" git commit-tree "$@"' -f |
Explicación del comando:
Lo que se esta haciendo es filtrar una rama con: git filter-branch --commit-filter Se cambia el author name y commiter name con: GIT_AUTHOR_NAME="[nuevo nombre]" GIT_COMMITTER_NAME="[nuevo nombre]" y para concluir se hace un nuevo commit forzado git commit-tree "$@"' -f
Por último se deben empujar los cambios al remoto.
1 |
git push --force-with-lease |
Renombrar el autor en un proyecto de Git con varios colaboradores
Si por el contrario en el proyecto se tiene varios colaboradores, el proceso es similar pero se debe agregar una condicional para renombrar solo el autor en cuestión.
1 2 3 4 5 6 7 |
git filter-branch --commit-filter ' if [ "$GIT_AUTHOR_NAME" = "[nombre anterior]" ]; then GIT_AUTHOR_NAME="[nuevo nombre]"; GIT_COMMITTER_NAME="[nuevo nombre]"; git commit-tree "$@"; fi' -f |
Explicación del comando
Del mismo modo que en el ejemplo anterior se filtra una rama con: git filter-branch --commit-filter pero en este caso el filtro que se pasa esta basado en una condicional donde buscamos definir el nuevo nombre solo en caso que concuerde con el autor anterior
1 2 3 4 |
if [ "$GIT_AUTHOR_NAME" = "[nombre anterior]" ]; then GIT_AUTHOR_NAME="[nuevo nombre]"; GIT_COMMITTER_NAME="[nuevo nombre]"; |
fuera de la condicional se hace el commit forzado igual que en el ejemplo anterior git commit-tree "$@"' -f
Por último se deben empujar los cambios al remoto.
1 |
git push --force-with-lease |
Artículo tomado del blog de J Haigh