Modificar el penúltimo compromiso

Resuelto rubo77 asked hace 10 años • 4 respuestas

Si encontró un error en su última confirmación, simplemente puede volver a confirmar la última confirmación con

git commit --amend

Pero si ya realizó otra confirmación, ¿cómo vuelve a enviar la confirmación anterior a esa?


Nota: Supongo, ya lo sabe, que solo debe usarlo --amendsi está seguro de que ningún otro desarrollador ya usó su confirmación en sentido ascendente.

rubo77 avatar Jul 08 '14 13:07 rubo77
Aceptado
  1. comete tu reparación con

    git commit -a -m "arreglar el compromiso (este se moverá una línea hacia arriba)"

    (el mensaje de confirmación no es importante, quedará obsoleto una vez que haya terminado)

  2. Ahora la magia:
    rebase el HEAD a la penúltima confirmación pero edite el mensaje de confirmación antes de esa manera, intercambiando la última y la penúltima línea en el editor de mensajes:

    git rebase -i CABEZA~3

    El editor mostrará los últimos 3 comités así:

    elige 2a06f16 este fue el último compromiso
     elija 0dbc5ce el penúltimo compromiso
     elija la confirmación de corrección 2e30418 (ésta se moverá una línea hacia arriba)
    
     # Rebase 011f3d0..2e30418 en 011f3d0
     #…
    

    intercambie las dos últimas líneas para que el mensaje de confirmación se vea, por ejemplo, así:

    elige 2a06f16 este fue el último compromiso
     corrección 2e30418 confirmación de corrección (ésta se moverá una línea hacia arriba)
     elija 0dbc5ce el penúltimo compromiso
    
     # Rebase 011f3d0..2e30418 en 011f3d0
     #…
    
  3. Consulta tu registro con

    git log CABEZA~3
  4. presione la línea de confirmación corregida con +para forzar un nuevo envío a la rama ya existente con

    git push origen + nombre de rama
rubo77 avatar Jul 08 '2014 06:07 rubo77

Bueno, llegué a esta página mientras buscaba lo mismo. Encontré una mejor manera con muchas otras opciones.

git rebase -i HEAD~2

Para el editor VIM:

Se abrirá un editor con los siguientes detalles.

pick 4f4f96f Added git ignore
pick d01e18c Added sample Blog

# Rebase 60e1cd3..d01e18c onto 60e1cd3 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]

presione i, cambie picka ro reword, algo como a continuación

pick 4f4f96f Added git ignore
r d01e18c Added sample Blog

PRENSAesc + : + wq

Se abrirá otra ventana, cambie el mensaje de confirmación.

PRENSAesc + : + wq

Para el Bloc de notas o cualquier otro editor:

Edítelo como un archivo de texto normal (elija r o reformule) y guárdelo.

Finalmente

git push -f 
MyTwoCents avatar Sep 02 '2020 14:09 MyTwoCents

El comentario de @aragaer es una forma aún más breve de hacer lo mismo:

git commit -a --fixup=HEAD^ #(or whatever commit to be fixed)

entonces

git rebase -i HEAD~3

y no necesita cambiar nada, por lo que simplemente puede cerrar el editor y gitse encargará de la reparación por sí mismo.

Nota: ¡Esto no funciona en mi sistema Ubuntu!

rubo77 avatar Aug 11 '2016 01:08 rubo77