Cómo cambiar múltiples confirmaciones en git para cambiar autor

Hice una serie de confirmaciones en Git, y ahora entiendo que olvidé establecer las propiedades del nombre de usuario y el nombre de usuario del correo electrónico (nueva máquina) correctamente. No he insertado estos compromisos en mi repositorio todavía, así que, ¿cómo puedo corregir estos compromisos antes de hacer esto (solo los últimos 3 compromisos en la rama principal)?

Vi git reset y git commit -C <id> --reset-author , pero no creo que esté en el camino correcto.

88
13 февр. pauldoo se establece el 13 de febrero 2011-02-13 01:48 '11 a la 1:48 2011-02-13 01:48
@ 5 respuestas

Rebase / modificar parece ineficiente cuando tiene el poder de una rama de filtro:

 git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then GIT_AUTHOR_EMAIL=correct@email; GIT_AUTHOR_NAME="Correct Name"; GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL; GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all 

(cuerdas divididas para mayor claridad, pero no es necesario)

¡Asegúrese de verificar los resultados cuando haya terminado para asegurarse de que no ha cambiado nada que no desea!

104
13 февр. La respuesta la da Jefromi el 13 de febrero. 2011-02-13 06:33 '11 a las 6:33 am 2011-02-13 06:33

El enfoque interactivo para la redirección es bastante bueno cuando se usa en combinación con exec. Puede ejecutar cualquier comando de shell contra una confirmación en particular o todas las confirmaciones en rebase.

Primero establece la configuración del autor git

 git config --global user.name "John Doe" git config --global user.email johndoe@example.com 

Luego, hasta que se reinicie, el autor corrige para todos después de un SHA dado

border=0
 git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD" 

Esto abrirá su editor para confirmar los cambios. Todo lo que tiene que hacer es guardar y salir, y pasará por cada confirmación y ejecutará el comando especificado en los indicadores -x.

En el comentario de @Dave a continuación, también puede cambiar el autor manteniendo las marcas de tiempo originales con:

 git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD" 
68
12 сент. Respuesta dada a Alex el 12 sep. 2014-09-12 22:05 '14 a las 10:05 pm 2014-09-12 22:05

Para cambiar el autor solo para el último commit:

 git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit 

Supongamos que desea cambiar el autor solo para las últimas N confirmaciones:

 git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit" 

NOTAS

  • la --no-edit asegura que git commit --amend no solicita confirmación adicional
  • cuando usa git rebase -i , puede seleccionar manualmente confirmaciones, donde puede cambiar el autor,

El archivo que está editando se verá así:

 pick 897fe9e simplify code a little pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit pick dc18f70 bugfix 
34
28 июля '15 в 10:19 2015-07-28 10:19 Chris Maes da la respuesta el 28 de julio de 2015 a las 10:19 2015-07-28 10:19

Creo que estas buscando git rebase --interactive

Le permite restablecer un compromiso específico y luego cambiar el historial de adición o agrupamiento de confirmaciones.

Aquí tiene una explicación http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

3
13 февр. La respuesta la da Fernando Díaz Garrido el 13 de febrero. 2011-02-13 02:16 '11 a las 2:16 2011-02-13 02:16

Si se siente inseguro con respecto a las disminuciones y correcciones, puede hacerlo de esa manera. Al mismo tiempo, también estará configurando una configuración global, que probablemente le gustaría hacer de todos modos.

git reset HEAD~ (deshacer la última confirmación)

git config --global user.name "Your Name"

git config --global user.email you@example.com

git commit -m "message"

0
13 окт. respuesta dada tymac 13 de octubre. 2017-10-13 06:21 '17 a las 6:21 am 2017-10-13 06:21

Otras preguntas acerca de las etiquetas o Haz una pregunta