He realizado una serie de confirmaciones en Git y ahora me doy cuenta de que olvidé establecer mi nombre de usuario y las propiedades de correo electrónico del usuario correctamente (máquina nueva). Todavía no he enviado estas confirmaciones a mi repositorio, entonces, ¿cómo puedo corregir estas confirmaciones antes de hacerlo (solo las 3 últimas confirmaciones en la rama maestra)?
He estado mirando git reset
y git commit -C <id> --reset-author
, pero no creo que esté en el camino correcto.
git
git-commit
git-rewrite-history
pauldoo
fuente
fuente
remote: error: GH007: Your push would publish a private email address.
... `! [remoto rechazado] maestro -> maestro (inserción rechazada debido a restricciones de privacidad del correo electrónico) `.Respuestas:
Rebase / enmienda parece ineficiente, cuando tiene el poder de la rama de filtro a su alcance:
(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 que no quisiste!
fuente
git filter-branch --help
es bastante sencillo :)--tag-name-filter cat
afilter-branch
fin de migrar etiquetas al nuevo historial. También usa en--branches --tags
lugar de--all
, que solo reescribe el historial de ramas y etiquetas y dejarefs
solo a otros (aunque eso probablemente no haga mucha diferencia a menos que, por ejemplo, lo esté usandogit-notes
)-- --all
conHEAD~1..HEAD
git log HEAD~2..HEAD
?El enfoque de rebase interactivo es bastante bueno cuando se usa junto con exec. Puede ejecutar cualquier comando de shell contra una confirmación específica o todas las confirmaciones en el rebase.
Primero establezca la configuración de autor de git
Luego, para restablecer el autor para todos los commits después del SHA dado
Esto abrirá 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.
Según el comentario de @ Dave a continuación, también puede cambiar el autor manteniendo las marcas de tiempo originales con:
fuente
filter-branch
si solo quieres arreglar tus últimas confirmaciones :). Sin embargo, tenga en cuenta que esto cambia la marca de tiempo de las confirmaciones.git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <[email protected]>' -CHEAD"
git log
también mostró una antigua autoría para mí, pero el estado de git identificó correctamente los nuevos commits y después del empuje forzado fueron como yo pretendía.git rebase -i --root …
lugar de pasar un SHA.Para cambiar el autor solo para la última confirmación:
Supongamos que solo desea cambiar el autor de las últimas N confirmaciones:
Notas
--no-edit
bandera se asegura degit commit --amend
que no pida una confirmación adicionalgit rebase -i
, puede seleccionar manualmente las confirmaciones donde cambiar el autor,el archivo que edite se verá así:
fuente
--rebase-merges
(corta-r
) para mantener intacta la topología de su rama si contiene algunas fusiones.Este método fue documentado por github para este mismo propósito. Los pasos son:
OLD_EMAIL
,CORRECT_EMAIL
yCORRECT_NAME
)git push --force --tags origin 'refs/heads/*'
y listo!fuente
Creo que lo que buscas es
git rebase --interactive
Le permite restablecer una confirmación específica y luego lanzar el historial cambiando agregando o agrupando confirmaciones
Aquí tienes una explicación https://web.archive.org/web/20100213104931/http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase -interactivo
fuente
Si no se siente seguro acerca de la rebaja y la corrección, puede hacerlo de esta manera. Al mismo tiempo, también estarías configurando la configuración global, lo que probablemente querías hacer de todos modos.
git reset HEAD~
(deshacer la última confirmación)git config --global user.name "Your Name"
git config --global user.email [email protected]
git commit -m "message"
fuente