Cuando comencé a usar git solo hice un git init
y comencé a llamar add
y commit
. Ahora estoy empezando a prestar atención y puedo ver que mis confirmaciones se muestran como cowens@localmachine
, en lugar de la dirección que quiero. Parece como si estuviera configurando GIT_AUTHOR_EMAIL
y GIT_COMMITTER_EMAIL
hará lo que quiero, pero todavía tengo esas confirmaciones antiguas con la dirección de correo electrónico / nombre incorrectos. ¿Cómo puedo corregir las confirmaciones anteriores?
76
git
para fines similares a este se hacen mejor en Stack Overflow .Respuestas:
Puede regresar y arreglar todas sus confirmaciones con una sola llamada a git filter-branch. Esto tiene el mismo efecto que rebase, pero solo necesita hacer un comando para arreglar todo su historial, en lugar de arreglar cada confirmación individualmente.
Puede corregir todos los correos electrónicos incorrectos con este comando:
Más información está disponible en los documentos de git
fuente
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
El comando filter-branch de Git es poderoso, pero es terriblemente difícil de usar para cualquier cosa que no sea trivial, como por ejemplo, si tiene que corregir más de un autor.
Aquí hay una alternativa que encontré útil, que utiliza la función .mailmap descrita en la página de manual de git-shortlog. Esto proporciona un mecanismo de mapeo de autores que podemos usar con la función de formateo de git log. Podemos usarlo para generar los comandos para elegir y enmendar, enmendar una secuencia de confirmaciones con nombre.
Por ejemplo, suponga que desea corregir la autoría en una rama $ BRANCH, comenzando en commit $ START.
Debe crear un archivo .mailmap en el directorio superior de su repositorio que asigna los nombres de autor existentes a los correctos. Puede obtener una lista de los nombres de autor existentes con:
Debe terminar con un archivo .mailmap como este (por ejemplo):
Ahora puede usar la función de formateo de git log para generar los comandos para reescribir $ BRANCH como $ BRANCH2.
El primer comando crea una nueva rama vacía que brota del commit $ START. Para cada confirmación entre $ START y luego el final de $ BRANCH, el segundo comando cherry selecciona la confirmación original al final de la rama actual $ BRANCH2, y la modifica para establecer el autor correctamente.
Esto también es generalmente aplicable: ponga esto en su ~ / .gitconfig:
Entonces, cuando necesita corregir autores, ahora solo necesita generar un archivo .map y hacer:
La referencia de sucursal original se puede reasignar a la nueva, y se puede eliminar la nueva:
fuente
Combinando la respuesta de ¿Cómo soluciono la metainformación en el primer commit en git?
fuente
Para seguir la respuesta de jedberg: puede usar
rebase -i
y elegir editar los commits en cuestión. Si usagit commit --amend --author <AUTHOR DETAILS>
y luegogit rebase continue
puede revisar y corregir el historial.fuente