with ver tag name modificados crear change archivos git git-commit git-rewrite-history

ver - git push tag



Cómo modificar varios commits en Git para cambiar el autor (5)

Creo que lo que estás buscando es git rebase --interactive

Te permite restablecer a un compromiso específico y luego ir arrojar el historial cambiando agregar o agrupar confirmaciones

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

He hecho una serie de commits en Git y ahora me doy cuenta de que olvidé establecer correctamente mi nombre de usuario y las propiedades de correo electrónico del usuario (máquina nueva). Aún no he enviado estos commits a mi repositorio, entonces ¿cómo puedo corregir estos commits antes de hacerlo (solo los 3 últimos commits en la rama master)?

He estado buscando en git reset y git commit -C <id> --reset-author , pero no creo estar en el camino correcto.


El enfoque de rebase interactivo es bastante bueno cuando se usa junto con el ejecutivo. Puede ejecutar cualquier comando de shell contra una confirmación específica o todas las confirmaciones en la rebase.

Primero establece tu configuración de autor git

git config --global user.name "John Doe" git config --global user.email [email protected]

A continuación, restablecer el autor para todas las confirmaciones después del SHA dado

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

Esto mostrará su editor para confirmar los cambios. Todo lo que necesita hacer aquí es guardar y salir, y pasará por cada confirmación y ejecutará el comando especificado en el indicador -x.

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

git rebase -i YOUR_SHA -x "git commit --amend --author ''New Name <[email protected]>'' -CHEAD"


Para cambiar el autor solo para la última confirmación:

git commit --amend --author ''Author Name <[email protected]>'' --no-edit

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

git rebase -i HEAD~4 -x "git commit --amend --author ''Author Name <[email protected]>'' --no-edit"

NOTAS

  • la bandera --no-edit se asegura de que el git commit --amend no solicite una confirmación adicional
  • cuando usas git rebase -i , puedes seleccionar manualmente los commits donde cambiar el autor,

el archivo que edite se verá así:

pick 897fe9e simplify code a little pick abb60f9 add new feature exec git commit --amend --author ''Author Name <[email protected]>'' --no-edit pick dc18f70 bugfix


Rebase / Amend parece ineficiente, cuando tienes el poder de la rama de filtro al alcance de tu mano:

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

(dividido en líneas para mayor claridad, pero no es necesario)

¡Asegúrate de inspeccionar el resultado cuando hayas terminado, para asegurarte de que no cambiaste nada de lo que no pretendías!


Si te sientes inseguro sobre degradar y corregir, puedes hacerlo de esta manera. Al mismo tiempo, también estarías configurando la configuración global que probablemente querías hacer de todos modos.

git reset HEAD~ (deshacer el último commit)

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

git config --global user.email [email protected]

git commit -m "message"