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?

Author: k0pernikus, 2012-01-24

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.

 1049
Author: Dietrich Epp,
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
 311
Author: Manish Shrivastava,
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.

 154
Author: Jinsong Li,
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 :)

 35
Author: Abdul Rizwan,
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).

 17
Author: Steve Benner,
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

 9
Author: Carlos,
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
 6
Author: Teo Choong Ping,
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
 3
Author: Beulah Sheeba,
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

 1
Author: Hasasn,
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
 1
Author: rob_7cc,
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

 0
Author: Abdallah Awwad Alkhwaldah,
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