Cambiar el mensaje de confirmación de git después de push (dado que nadie sacó del control remoto)
He hecho un commit de git y un push posterior. Me gustaría cambiar el mensaje de confirmación. Si he entendido bien, esto no es recomendable porque alguien podría haber sacado del repositorio remoto antes de hacer tales cambios. ¿Y si sé que nadie ha tirado?
¿Hay alguna manera de hacer esto?
11 answers
Cambiando la historia
Si es la confirmación más reciente, simplemente puede hacer esto:
git commit --amend
Esto muestra el editor con el último mensaje de confirmación y le permite editar el mensaje. (Puede usar -m
si desea borrar el mensaje antiguo y usar uno nuevo.)
Empujando
Y luego cuando empujes, haz esto: {[16]]}
git push --force-with-lease <repository> <branch>
O puedes usar"+":
git push <repository> +<branch>
O puedes usar --force
:
git push --force <repository> <branch>
Tenga cuidado al usar estos comando.
-
Si alguien más envió cambios a la misma rama, probablemente quieras evitar destruir esos cambios. La opción
--force-with-lease
es la más segura, ya que se abortará si hay algún cambio ascendente ( Si no especificas la rama explícitamente, Git usará la configuración predeterminada de push. Si su configuración de inserción predeterminada es "coincidente", entonces puede destruir los cambios en varias ramas al mismo tiempo.
Extracción / obtención después
Cualquiera que ya haya sacado ahora recibirá un mensaje de error, y tendrá que actualizar (suponiendo que no están haciendo ningún cambio por sí mismos) haciendo algo como esto:
git fetch origin
git reset --hard origin/master # Loses local commits
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 sabe, y felizmente borrará otros datos también. Tan piense en --force
como "Quiero destruir datos, y sé con certeza qué datos están siendo destruidos."Pero cuando se confirman los datos destruidos, a menudo puede recuperar las confirmaciones antiguas del reflog - los datos son en realidad huérfanos en lugar de destruidos (aunque las confirmaciones huérfanas se eliminan periódicamente).
Si no crees que estás destruyendo datos, entonces mantente alejado de --force
... pueden pasar cosas malas.
Esta es la razón por la que --force-with-lease
es algo más seguro.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:37
Solo di:
git commit --amend -m "New commit message"
y luego
git push --force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-02 15:14:38
Podría llegar tarde a la fiesta, aquí hay una respuesta que no veo aquí.
Paso 1: git rebase -i HEAD~n
para hacer un rebase interactivo para las últimas confirmaciones n
afectadas.
Git abrirá un editor para manejar esas confirmaciones, observe este comando: # r, reword = use commit, but edit the commit message
, eso es exactamente lo que necesitamos.
Step2 : cambie pick
a r
para aquellos commits que desea actualizar el msg.
Guarde y cierre el editor.
Step3: en los siguientes archivos de confirmación, actualice el mensaje de confirmación como te gusta
Step4 : después de todas las confirmaciones se actualizan los msg. es posible que desee hacer git push -f
para actualizar el control remoto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-08 16:41:24
Utilice estos dos pasos en la consola:
git commit --amend -m "new commit message"
Y luego
git push -f
Hecho :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-19 09:48:45
Debe tenerse en cuenta que si utiliza push --force
con múltiples referencias, todas se modificarán como resultado. Asegúrate de prestar atención a dónde está configurado tu repositorio git para enviar. Afortunadamente, hay una manera de salvaguardar el proceso ligeramente, especificando una sola rama para actualizar. Leer desde las páginas man de git:
Tenga en cuenta que force force se aplica a todas las referencias que se empujan, por lo tanto, utilizando con empuje.conjunto predeterminado a coincidencia o con push múltiple destino configurado con control remoto.*.push puede sobrescribir referencias otros que la rama actual (incluyendo referencias locales que están estrictamente detrás su contraparte remota). Para forzar un push a solo una rama, use un + delante del refspec para empujar (por ejemplo, git push origin + master para forzar un empuje a la rama principal).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-23 23:47:16
Si quieres modificar un commit anterior, no el último, necesitarás usar el comando rebase
como se explica aquí, Página de ayuda de Github , en la sección Modificando el mensaje de mensajes de commit anteriores o múltiples
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-28 10:43:22
Orden 1.
git commit --amend -m "New and correct message"
Entonces
Orden 2.
git push origin --force
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-30 13:11:26
git commit --amend
Luego edita y luego cambia el mensaje en la ventana actual. Después de eso hacer
git push --force-with-lease
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-12 11:59:43
Esto funciona para mí bastante bien,
Git checkout origen / nombre de rama
Si ya estás en rama, entonces es mejor hacer pull o rebase
git pull
O
git -c core.quotepath=false fetch origin --progress --prune
Más tarde, simplemente puede usar
git commit --amend -m "Your message here"
O si desea abrir el editor de texto, utilice
git commit --amend
Prefiero usar text-editor si tienes muchos comentarios. Puede configurar su editor de texto preferido con command
git config --global core.editor your_preffered_editor_here
De todos modos, cuando haya terminado de cambiar el mensaje de confirmación, guárdelo y salida
Y luego ejecutar
git push --force
Y has terminado
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-12 13:51:53
Otra opción es crear una "confirmación de errata" adicional (y push) que haga referencia al objeto de confirmación que contiene el error the la nueva confirmación de errata también proporciona la corrección. Un commit de errata es un commit sin cambios sustantivos en el código pero con un mensaje de commit importante add por ejemplo, agrega un carácter de espacio a tu archivo readme y confirma ese cambio con el mensaje de commit importante, o usa la opción de git --allow-empty
. Es ciertamente más fácil y más seguro que rebasing, no modifica historia verdadera, y mantiene el árbol de ramas limpio (usar amend
también es una buena opción si está corrigiendo la confirmación más reciente, pero una confirmación de errata puede ser una buena opción para confirmaciones más antiguas). Este tipo de cosas rara vez sucede que simplemente documentar el error es lo suficientemente bueno. En el futuro, si necesitas buscar a través de un registro de git una palabra clave de característica, el commit original (erróneo) puede no aparecer porque se usó la palabra clave incorrecta en ese commit original (el error tipográfico original) however sin embargo, la palabra clave aparecerá en el commit de errata que luego le indicará el commit original que tuvo el error tipográfico. He aquí un ejemplo:
$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. This commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (*change highlighted*): Changed background color to *blue* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-09 15:16:03
Información adicional para el mismo problema si está utilizando bitbucket pipeline
Edita tu mensaje
git commit --amend
Empuje al servidor
git push --force <repository> <branch>
Luego agrega force force a tu comando push en la canalización
git ftp push --force
Esto eliminará tu(s) confirmación (es) anterior (es) y empujará tu confirmación actual.
Retire la fuerza --después de la primera pulsación
Lo probé en bitbucket pipeline y funciona bien
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-05 09:26:22