He hecho un git commit y un empujón posterior. Me gustaría cambiar el mensaje de confirmación. Si lo entiendo correctamente, esto no es aconsejable porque alguien podría haberse retirado del repositorio remoto antes de realizar dichos cambios. ¿Qué pasa si sé que nadie ha tirado?
¿Hay alguna forma de hacer esto?

Respuestas:
Historia cambiante
Si es la confirmación más reciente, simplemente puede hacer esto:
Esto abre el editor con el último mensaje de confirmación y le permite editar el mensaje. (Puede usar
-msi desea borrar el mensaje anterior y usar uno nuevo).Emprendedor
Y luego, cuando empujes, haz esto:
O puedes usar "+":
O puedes usar
--force:Tenga cuidado al usar estos comandos.
Si alguien más empujó los cambios a la misma rama, probablemente desee evitar destruir esos cambios. La
--force-with-leaseopción es la más segura, ya que abortará si hay algún cambio ascendente (Si no especifica la rama explícitamente, Git usará la configuración de inserción predeterminada. Si su configuración de inserción predeterminada es "coincidente", puede destruir los cambios en varias ramas al mismo tiempo.
Tirar / buscar después
Cualquier persona que ya se haya retirado recibirá un mensaje de error, y deberá actualizar (suponiendo que ellos mismos no estén haciendo ningún cambio) haciendo algo como esto:
Tenga cuidado al usar
reset --hard. Si tiene cambios en la rama, esos cambios serán destruidos.Una nota sobre la modificación del historial
Los datos destruidos son realmente solo el antiguo mensaje de confirmación, pero
--forceno lo saben, y felizmente también eliminarán otros datos. Así que piense--forcecomo "Quiero destruir datos, y sé con certeza qué datos se están destruyendo". Pero cuando se confirman los datos destruidos, a menudo puede recuperar las confirmaciones antiguas del registro de datos: los datos se quedan huérfanos en lugar de destruidos (aunque las confirmaciones huérfanas se eliminan periódicamente).Si no crees que estás destruyendo datos, aléjate de
--force... podrían ocurrir cosas malas .Por eso
--force-with-leasees algo más seguro.fuente
git push --forcesin las opciones <repository> y <branch> también funciona, si tiene su configuración aguas arriba.<repository>? Esorigin?org/repo? O simplementerepo?Sólo decir :
y entonces
fuente
git push origin <BRANCH-NAME>no funcionó, tuve que usargit push --forcecomo se explica en la respuesta aceptada.git push --force, o de lo contrario el empuje no pasa.Para editar una confirmación que no sea la más reciente:
Paso 1 :
git rebase -i HEAD~nhacer un rebase interactivo para los últimosncommits afectados. (es decir, si desea cambiar un mensaje de confirmación 3 confirmaciones, hagagit rebase -i HEAD~3)git desplegará un editor para manejar esas confirmaciones, observe este comando:
eso es exactamente lo que necesitamos!
Paso 2 : Cambie
pickarlas confirmaciones que desea actualizar el mensaje. No se moleste en cambiar el mensaje de confirmación aquí, se ignorará. Lo harás en el siguiente paso. Guarda y cierra el editor.Tenga en cuenta que si edita su 'plan' de rebase pero no comienza el proceso de permitirle cambiar el nombre de los archivos, ejecute:
Si desea cambiar el editor de texto utilizado para la sesión interactiva (por ejemplo, del vi predeterminado al nano), ejecute:
Paso 3 : Git abrirá otro editor para cada revisión que coloques
rantes. Actualice el mensaje de confirmación como desee, luego guarde y cierre el editor.Paso 4 : Después de todos los commits se actualizan los mensajes. es posible que desee hacer
git push -fpara actualizar el control remoto.fuente
git rebase -i HEAD~3git rebase --continue. Y si desea cambiar el editor de texto utilizado para la sesión interactiva (por ejemplo, de forma predeterminadavianano), ejecuteGIT_EDITOR=nano git rebase -i HEAD~n.Use estos dos pasos en la consola:
y entonces
Hecho :)
fuente
Cabe señalar que si usa
push --forcecon múltiples referencias, TODOS serán modificados como resultado. Asegúrese de prestar atención a dónde está configurado su repositorio de git para empujar. Afortunadamente, hay una manera de salvaguardar un poco el proceso, especificando una única rama para actualizar. Lea las páginas de manual de git:fuente
Si desea modificar una confirmación anterior, no la última, deberá usar el
rebasecomando como se explica aquí , en la página de ayuda de Github , en la sección Modificación del mensaje de mensajes anteriores o de confirmación múltiple.fuente
Comando 1 .
Entonces,
Comando 2 .
fuente
luego edite y cambie el mensaje en la ventana actual. Después de eso haz
fuente
Otra opción es crear un "compromiso de erratas" adicional (y empujar) que haga referencia al objeto de compromiso que contiene el error; el nuevo compromiso de erratas también proporciona la corrección. Una confirmación de errata es una confirmación sin cambios sustanciales de código pero con un mensaje de confirmación importante; por ejemplo, agregue un carácter de espacio a su archivo readme y confirme ese cambio con el mensaje de confirmación importante, o use la opción git
--allow-empty. Ciertamente es más fácil y seguro que el rebase, no modifica el historial verdadero y mantiene limpio el árbol de la rama (usandoamendtambién es una buena opción si está corrigiendo la confirmación más reciente, pero una confirmación de erratas puede ser una buena opción para las confirmaciones anteriores). Este tipo de cosas rara vez sucede que simplemente documentar el error es lo suficientemente bueno. En el futuro, si necesita buscar en un registro git una palabra clave de función, la confirmación original (errónea) puede no aparecer porque se utilizó la palabra clave incorrecta en esa confirmación original (el error tipográfico original); sin embargo, la palabra clave aparecerá en la confirmación de erratas que luego te indicará la confirmación original que tenía el error tipográfico. Aquí hay un ejemplo:$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Autor: Primero Último Fecha: miércoles 8 de agosto 15:55:52 2018 -0600 Errata cometer: Este commit no tiene un cambio sustancial de código. Esta confirmación se proporciona solo para documentar una corrección a un mensaje de confirmación anterior. Esto pertenece al objeto de confirmación e083a7abd8deb5776cb304fa13731a4182a24be1 Mensaje de confirmación incorrecto original: Se cambió el color de fondo a rojo. Corrección (* cambio resaltado *): Se cambió el color de fondo a * azul * commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Autor: Primero Último Fecha: miércoles 8 de agosto 15:43:16 2018 -0600 Algún mensaje de confirmación provisional commit e083a7abd8deb5776cb304fa13731a4182a24be1 Autor: Primero Último Fecha: miércoles 8 de agosto 13:31:32 2018 -0600 Se cambió el color de fondo a rojo.fuente
git commit -m “fixed feature A”(Supongamos que git le da a este un ID de confirmación de e3ab7312 ... ... (luego se da cuenta de que su mensaje era incorrecto, así que ahora realice un cambio sin consecuencias en un archivo, como agregar un espacio al archivo léame, o use la—allow-emptyopción git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’'' 'git notesesto serviría para el mismo propósito que un "compromiso de erratas". Simplemente agregue una nota a una confirmación anterior para anotar o corregir cualquier error en el mensaje de confirmación:https://git-scm.com/docs/git-notesEsto me funciona bastante bien,
origen / nombre de sucursal de git checkout
si ya estás en la sucursal, entonces es mejor hacer pull o rebase
o
Luego puedes simplemente usar
o si desea abrir el editor de texto, use
Preferiré usar el editor de texto si tienes muchos comentarios. Puede configurar su editor de texto preferido con el comando
De todos modos, cuando haya terminado de cambiar el mensaje de confirmación, guárdelo y salga
y luego correr
Y tu estas listo
fuente
información adicional para el mismo problema si está utilizando una tubería de bitbucket
edita tu mensaje
empujar al servidor
luego agregue --force a su comando push en la tubería
Esto eliminará sus confirmaciones anteriores y empujará la actual.
Lo probé en la tubería Bitbucket y funciona bien
fuente