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 elgit 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"