¿Cómo cambiar los compromisos existentes, sin pulir?

Escribí lo incorrecto en el mensaje de confirmación. Además, me olvidé de incluir algunos archivos.

¿Cómo cambiar el mensaje / archivos de confirmación? El compromiso aún no ha comenzado.

7676
07 окт. fijado por Laurie Young 07 oct 2008-10-07 18:44 '08 a las 18:44 2008-10-07 18:44
@ 27 respuestas

Cambios en el mensaje de confirmación más reciente.

 git commit --amend -m "New commit message" 

... Sin embargo, esto puede hacer que sea más difícil ingresar mensajes de confirmación de varias líneas o pequeñas correcciones.

Antes de hacer esto, asegúrese de que no haya ningún cambio en la copia de trabajo, de lo contrario se solucionarán. (Los cambios no realizados no serán arreglados.)

Modificando el mensaje de confirmación que ya ha enviado a la rama remota.

Si ya ha enviado su compromiso a una rama remota, entonces necesita forzar el compromiso con:

SHA , lo que crea un problema si otras personas tienen copias de las confirmaciones antiguas que usted ha reescrito.  Cualquier persona que tenga una copia de un antiguo compromiso tendrá que sincronizar su trabajo con el nuevo compromiso reescrito, lo que a veces puede ser difícil, así que asegúrese de coordinar con otros cuando intente reescribir el historial de un compromiso común, o simplemente evite volver a escribir los compromisos totales en general. 


Usa rebaz interactivo

Otra opción es usar rebase interactivo.
Esto le permite editar cualquier mensaje que desee actualizar, incluso si no es el último mensaje.

Para hacer git squash, sigue estos pasos:

 // X is the number of commits to the last commit you want to be able to edit git rebase -i HEAD~X 

Tan pronto como aplastes tus confirmaciones, selecciona e/r para editar el mensaje.

2019

07 окт. La respuesta se da EfForEffort 07 oct. 2008-10-07 18:50 '08 a las 6:50 pm 2008-10-07 18:50
2438
08 февр. La respuesta se da lfx_cool 08 feb. 2010-02-08 07:26 '10 a las 7:26 am 2010-02-08 07:26

Si la solución que desea corregir no es la última:

  • git rebase --interactive $parent_of_flawed_commit

    Si desea corregir varias confirmaciones erróneas, pase el código principal de la más antigua.

  • Aparece un editor con una lista de todas las confirmaciones desde que lo dio.

    • Cambie pick to reword (o versiones anteriores de Git, para edit ) antes de cualquier corrección que desee corregir.
    • Después de guardar, Git reproducirá las confirmaciones enumeradas.

  • Para cada confirmación que desee rehacer, Git lo llevará de vuelta a su editor. Para cada confirmación que desea cambiar, Git lo pone en una shell. Si estás en una concha:

    • Cambia la fijación de cualquier manera.
    • git commit --amend
    • git rebase --continue

La mayor parte de esta secuencia le será explicada por la salida de varios equipos sobre la marcha. Es muy fácil, no necesita memorizarlo, solo recuerde que git rebase --interactive permite solucionarlo, sin importar cuánto tiempo pasaron.


Tenga en cuenta que no desea cambiar los compromisos que ya ha presionado. O tal vez lo harás, pero en este caso tendrás que tener mucho cuidado para comunicarte con todos los que hayan hecho tus compromisos y hayan hecho un trabajo por encima de ellos. ¿Cómo restaurar / resincronizar después de que alguien arrastró una rebase o restableciera un hilo publicado?

2321
07 окт. La respuesta es dada por Aristóteles Pagaltzis 07 de octubre 2008-10-07 22:52 '08 a las 10:52 pm 2008-10-07 22:52

Para realizar cambios en una confirmación anterior, realice los cambios necesarios y realice estos cambios, y luego ejecute

 git commit --amend -C HEAD 

Para arreglar el commit anterior, eliminándolo completamente, ejecute

 git rebase -i HEAD~ commit_count 

(Reemplace commit_count con el número de confirmaciones que desea cambiar). Este comando inicia su editor. Marque el primer retenedor (el que desea cambiar) como "editar" en lugar de "seleccionar", luego guarde y salga del editor. Realice los cambios que desee confirmar y luego ejecute

758
16 авг. La respuesta es dada por Fatih 16 ago. 2011-08-16 00:20 '11 a las 0:20 2011-08-16 00:20

Como se mencionó, git commit --amend es una forma de sobrescribir el último commit. Una nota: si desea también sobrescribir archivos , el comando será

390
07 июня '11 в 0:16 2011-06-07 00:16 La respuesta la da John el 7 de junio de 2011 a las 0:16 2011-06-07 00:16

También puedes usar git filter-branch para esto.

351
01 сент. Responder Marcar 01 Sep 2012-09-01 23:35 '12 a las 23:35 2012-09-01 23:35

Yo prefiero de esta manera.

 git commit --amend -c <commit ID> 

De lo contrario, habrá una nueva confirmación con un nuevo ID de confirmación.

312
10 янв. Respuesta dada por krevedko 10 de enero 2013-01-10 17:23 '13 a las 17:23 2013-01-10 17:23

Si utiliza la herramienta GUI de Git, hay un botón llamado último compromiso. Haga clic en este botón y, a continuación, muestre sus últimos archivos y mensajes de confirmación. Simplemente edite este mensaje y podrá corregirlo con un nuevo mensaje de confirmación.

O usa este comando desde la consola / terminal:

 git commit -a --amend -m "My new commit message" 
309
08 нояб. la respuesta se da Akhilraj NS 08 Nov. 2012-11-08 06:51 '12 a las 6:51 am 2012-11-08 06:51

Puedes usar git rebasing . Por ejemplo, si desea volver a cambiar para confirmar bbc643cd, ejecute

 $ git rebase bbc643cd^ --interactive 

En el editor predeterminado, cambie 'pick' a 'edit' en la línea cuyo compromiso desea cambiar. Haz cambios y luego ejecútalos con

 $ git add <filepattern> 

Ahora puedes usar

 $ git commit --amend 

Para cambiar el commit, y después de eso.

 $ git rebase --continue 

Para volver a la fijación del capítulo anterior.

282
22 янв. La respuesta la da Shoaib Ud-Din 22 de enero. 2013-01-22 20:23 '13 a las 20:23 2013-01-22 20:23
  • Si desea cambiar el último mensaje de confirmación, siga estos pasos:

     git commit --amend 

    Esto lo llevará a su editor de texto y le permitirá cambiar el último mensaje de confirmación.

  • Si desea cambiar los últimos 3 mensajes de confirmación o cualquier mensaje de confirmación en este punto, coloque HEAD~3 en el git rebase -i :

     git rebase -i HEAD~3 
275
22 окт. respuesta dada por Heena Hussain 22 de octubre 2012-10-22 14:22 '12 a las 2:22 pm 2012-10-22 14:22

Si necesita cambiar el mensaje de confirmación anterior a varias sucursales (es decir, un mensaje con un mensaje de error está presente en varias sucursales), puede usar:

256
15 нояб. La respuesta es dada por los sebers el 15 de noviembre. 2012-11-15 12:29 '12 a las 12:29 2012-11-15 12:29

uso de

 git commit --amend 

Para entender esto en detalle, una excelente publicación es 4. Sobrescriba el historial de Git . También le indica cuándo no debe usar git commit --amend .

221
27 марта '13 в 23:43 2013-03-27 23:43 la respuesta se da a la piel 27 de marzo de 13 a las 23:43 2013-03-27 23:43

Enmendar

Tienes un par de opciones. Tu puedes hacer

 git commit --amend 

Hasta que se ejecute el último.

Redireccionamiento interactivo

De lo contrario, si este no es su último compromiso, puede realizar un reinicio interactivo,

 git rebase -i [branched_from] [hash before commit] 

Luego, dentro de la redirección interactiva, simplemente agregue una edición a este compromiso. Cuando esto suceda, haga git commit --amend y cambie el mensaje de confirmación. Si desea volver a este punto de fijación, también puede usar git reflog y simplemente eliminar esta solución. Entonces ejecutas git commit nuevo.

195
18 янв. La respuesta es dada wallerjake 18 de enero. 2013-01-18 04:45 '13 a las 4:45 am 2013-01-18 04:45

Si usa la GUI de Git, puede cambiar la última confirmación en la que no se hizo clic:

 Commit/Amend Last Commit 
183
01 дек. La respuesta la da gulchrider 01 dic. 2012-12-01 08:03 '12 a las 8:03 2012-12-01 08:03

Si esta es su última confirmación, simplemente corrija la confirmación:

 git commit --amend -o -m "New commit message" 

(utilizando el --only -o ( --only ) para asegurarse de que solo cambia el mensaje de confirmación)


Si parece un compromiso, use una rebase interactiva increíble:

 git rebase -i @~9 # Show the last 9 commits in a text editor 

Encuentre la confirmación deseada, cambie la pick a r ( reword ) y guarde y cierre el archivo. Hecho



Tutorial en miniatura vim (o cómo reinstalar solo 8 pulsaciones de tecla 3j cw r Esc ZZ ):

  • Ejecuta el vimtutor si tienes tiempo.
  • h j k l corresponden a las teclas de navegación
  • Todos los comandos pueden tener un prefijo de rango, por ejemplo. 3j mueve a 3 lineas
  • i , para ingresar al modo de inserción: el texto que ingrese aparecerá en el archivo
  • Esc o Ctrl c para salir del modo de inserción y volver al modo normal.
  • u para cancelar
  • Ctrl r para repetir
  • dd , dw , dl para eliminar una línea, palabra o letra, respectivamente
  • cc , cw , cl para cambiar una línea, palabra o letra, respectivamente (igual que dd i )
  • yy , yw , yl para copiar ("tirar") líneas, palabras o letras, respectivamente
  • p o p para insertar después o antes de la posición actual, respectivamente
  • :w Entrar para guardar (escribir) el archivo
  • :q! Entrar en la salida sin guardar
  • :wq Enter o ZZ para guardar y salir

Si está editando una gran cantidad de texto, cambie a la distribución del teclado Dvorak, aprenda el tipo de toque y aprenda vim. ¿Vale la pena el esfuerzo? Si



ProTip ™: no tenga miedo de experimentar con comandos "peligrosos" que reescriben el historial *: Git no elimina sus arreglos durante 90 días de forma predeterminada; Puedes encontrarlos en el reflog:

 $ git reset @~3 # go back 3 commits $ git reflog c4f708b HEAD@{0}: reset: moving to @~3 2c52489 HEAD@{1}: commit: more changes 4a5246d HEAD@{2}: commit: make important changes e8571e4 HEAD@{3}: commit: make some changes ... earlier commits ... $ git reset 2c52489 ... and you're back where you started 

* Tenga cuidado con parámetros como --hard y --force , aunque pueden descartar datos.
* Tampoco reescriba la historia en ninguna de las sucursales con las que coopera.

170
10 февр. La respuesta se da Zaz 10 de febrero. 2015-02-10 03:01 '15 a las 3:01 2015-02-10 03:01

Utilizo Git GUI tanto como puedo, y esto te da la oportunidad de cambiar el último mensaje:

2019

165
05 авг. La respuesta la da Havard Graff 05 ago. 2013-08-05 02:13 '13 a las 2:13 2013-08-05 02:13

Wow, entonces hay muchas maneras de hacer esto.

Otra forma de hacerlo es eliminar la última confirmación, pero guardar sus cambios para que no pierda su trabajo. A continuación, puede realizar otra confirmación con un mensaje corregido. Se verá algo como esto:

135
03 дек. La respuesta la da Radu Murzea 03 dic. 2013-12-03 00:31 '13 a las 0:31 2013-12-03 00:31

Si quieres cambiar el último uso de commit:

 git commit --amend 

o

124
07 янв. respuesta dada por Shubham Chaudhary 07 de enero 2014-01-07 01:03 '14 a la 1:03 2014-01-07 01:03

Para aquellos que buscan una interfaz gráfica de usuario para Windows / Mac para ayudar con la edición de mensajes antiguos (es decir, no solo el mensaje más reciente), recomendaría SourceTree . Pasos a seguir a continuación.

2019

123
06 нояб. La respuesta es dada por Steve Chambers 06 de noviembre 2014-11-06 18:01 '14 a las 18:01 2014-11-06 18:01

Si desea cambiar el último mensaje, debe utilizar el indicador --only o su acceso directo -o con commit --amend :

122
23 мая '14 в 11:40 2014-05-23 11:40 Respondió a David Ongaro el 23 de mayo de 2014 a las 11:40 2014-05-23 11:40

Actualice el último mensaje de error con un nuevo mensaje de confirmación en una línea:

 # You can reset your head to n number of commit # NOT a good idea for changing last commit message # but you can get an idea to split commit into multiple commits git reset --soft HEAD^ # it will reset you last commit. Now, you # can re-commit it with new commit message. 

Use reiniciar para dividir las confirmaciones en confirmaciones más pequeñas.

git reset puede ayudarte a dividir un commit en varios commit:

99
22 янв. la respuesta se da przbadu 22 de enero 2014-01-22 11:57 14 a las 11:57 2014-01-22 11:57

Hay muchas respuestas a esta pregunta, pero ninguna de ellas explica en detalle cómo cambiar los mensajes de reparación antiguos con VIM. ¡Estoy atascado tratando de hacerlo yo mismo, así que aquí te contaré en detalle cómo lo hice especialmente para las personas que no tienen experiencia en VIM!

Quería cambiar mis últimas cinco confirmaciones que ya había hecho clic en el servidor. Es bastante “peligroso” si alguien más lo sacó, puedes dañar las cosas cambiando los mensajes de confirmación. Sin embargo, cuando está trabajando en su pequeña sucursal y está seguro de que nadie lo extrajo, puede cambiarlo de la siguiente manera:

Supongamos que desea cambiar sus últimas cinco confirmaciones, luego ingrese esto en el terminal:

git rebase -i HEAD~5 * Donde 5 es el número de mensajes de confirmación que desea cambiar. (por lo tanto, si desea cambiar el décimo al último compromiso, ingrese 10)

Este comando lo llevará a VIM, donde podrá editar su historial de confirmación. Verás las últimas 5 confirmaciones en la parte superior:

pick <commit hash> commit message

En lugar de pick necesitas escribir una reword . Puedes hacer esto en VIM escribiendo i , lo que te obliga a entrar en modo INSERT. (Puede ver que está en modo de inserción con la palabra INSERTAR a continuación). Para las confirmaciones, desea cambiar el tipo de cambio en lugar de pick

Luego, debe guardar y salir de esta pantalla. Para ello, primero cambie al modo de comando presionando el botón esc. (Puede verificar que está en modo comando si la palabra INSERT desaparece a continuación). Luego puede ingresar un comando escribiendo : el comando guardar y salir es wq . Por lo tanto, si escribe :wq youre ont, tendrá razón.

Luego, VIM irá a cualquier mensaje de confirmación que desee reescribir, aquí puede cambiar el mensaje de confirmación. Para hacerlo, ingrese al modo INSERTAR, cambie el mensaje de confirmación, ingrese al modo comando y guarde y cierre. ¡Hazlo 5 veces, y estás fuera de VIM!

Entonces, si ya has presionado tus confirmaciones erróneas, debes git push --force sobrescribirlas. Recuerda que git push --force es una cosa bastante peligrosa, así que asegúrate de que nadie haya salido del servidor, ya que presionaste tus errores incorrectos.

Ahora has cambiado tu mensaje cometer!