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
-m
si 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-lease
opció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
--force
no lo saben, y felizmente también eliminarán otros datos. Así que piense--force
como "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-lease
es algo más seguro.fuente
git push --force
sin 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 --force
como 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~n
hacer un rebase interactivo para los últimosn
commits 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
pick
ar
las 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
r
antes. 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 -f
para actualizar el control remoto.fuente
git rebase -i HEAD~3
git rebase --continue
. Y si desea cambiar el editor de texto utilizado para la sesión interactiva (por ejemplo, de forma predeterminadavi
anano
), 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 --force
con 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
rebase
comando 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 (usandoamend
tambié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: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-empty
opción git). ..git commit -m “Errata commit for previous commit e3ab7312... original message should have been ‘fixed feature *B*’
'' 'git notes
esto 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-notes
Esto 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