Git amend es una forma que tienes para hacer cambios a tu commit más recientes sin tener que hacer un nuevo commit.
Recomendaciones en el uso de git amend
El comando de git amend se usa para modificar el último commit. Es decir, te permite "revisar" o "corregir" el último cambio confirmado que hayas hecho en tu proyecto.
Por ejemplo, imagínate que acabas de hacer un commit, pero te diste cuenta de que no querías enviarlo porque faltaba algo más. En lugar de hacer un nuevo commit, puedes usar git commit --amend para agregar esos cambios al commit más reciente. Esto es útil porque mantiene tu historial de commits limpio y organizado.
Usar amend es considerado una mala práctica, especialmente después de haber hecho push o pull al repositorio remoto. Al hacer amend con algún commit que ya esté en remoto, se generará un conflicto que deberá resolverse con un commit adicional. En este proceso, se perderá el beneficio del amend.
No utilizar --amend para reconstruir commits que ya se encuentran en el repositorio remoto. Esto sería una mala práctica.
¿Cómo hacer un git amend?
Utilizar amend para remendar un commit puede modificar el commit más reciente (enmendar) en la misma rama. Se ejecuta de la siguiente manera:
gitadd -A # Para hacer uso de amend los archivos deben de estar en staging
git commit --amend # Remendar último commit
Para qué sirve git commit amend
Este comando sirve para agregar archivos nuevos o actualizar el commit anterior y no generar commits innecesarios. También es una forma sencilla de editar o agregar comentarios al commit anterior porque abrirá la consola para editar este commit anterior.
Reconstrucción de commits
Si el último commit que hicimos tenía un error, por ejemplo, de ortografía o quizá se nos olvidó agregar algo al código de ese commit podemos darle solución con el siguiente comando.
→ Modificar el mensaje del commit más reciente.
$ git commit --amend
→ Modificar el commit más reciente y su mensaje en la misma línea.
$ git commit --amend -m
Recordar que -m permite escribir un mensaje desde la línea de comandos sin tener que abrir un editor.
→ Modificar el commit sin modificar el mensaje de dicho commit.
$ git commit --amend --no-edit
El indicador --no-edit permite hacer correcciones en el código sin modificar el mensaje original.
Este comando es una manera práctica de modificar la información más reciente de nuestro repositorio.
Contribución creada con aportes de: David Behar y Alex Camacho.
Me parce genial este comando y un homenaje al gran freddier
Muy bueno el meme pero tenía que llegar un hater (rima). En realidad sería --amend porque si solo tuviera una línea no permitiría palabras.
--- Recalco que buen meme ---
Excelente meme jajaj.
La descripción grafica de cuando utilizamos este comando.
y si, es --amend pero eso no te quita el merito.
==Apuntes! ✌==
Espero les sirvan ...
haha ya te sigo!!
Gracias!!
el commit --amend es muy util, pero hay que tener cuidado en algunos casos, como en el caso de que el commit que quieras enmendar lo hayas pusheado al repositorio remoto, entonces quieras enmendar un commit que esta en remoto.
Así como en el caso de cherry-pick y rebase, hay que usarlo con cuidado porque modificará la historia de tu repositorio.
Digamos que haces un cambio al archivo a.txt y haces un commit.
Luego subes ese commit al repositorio haciendo push.
Pero se te olvido agregar cambios a ese commit y quieres enmendarlo.
Haces un git --amend y en la historia de tu repositorio local, pareciera que no ha pasado nada: enmendaste tu commit.
Pero resulta que en el repositorio remoto eso no ha ocurrido, ese git --amend no tuvo lugar en el repositorio remoto, y al hacer git status te mostrará un error así:
Your branch and 'origin/master' have diverged,and have 1 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)
y al momento de hacer push para sobreescribirlo, te aparecerá este error:
![rejected] master ->master(non-fast-forward)error: failed to push some refs to 'git@github.com:luisxxor/hyperblog-1.git'hint:Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart.Integrate the remote changes(e.g.hint:'git pull ...') before pushing again.hint:See the 'Note about fast-forwards'in'git push --help'for details.
Y tendrás que hacer git pull para mergear los cambios de tu repositorio remoto y finalmente hacer push. Es decir, se puede hacer, pero sería contraproducente, porque la idea del amend era enmendar un sólo commit y no generar commits adicionales, pero el resultado de continuar haciendolo en éste caso es que tienes:
El primer commit
El commit enmendado
Y el commit del merge
tl:dr
Es una mala práctica enmendar un commit que ya ha sido pusheado al repositorio remoto.
En pocas palabras, sólo usar ammend en local y no hacer push antes de remendar un commit
Creo que ahí lo menciona claramente y que ninguna de esas advertencias te saldrían si es que hubieras hecho un git pull origin master antes de hacer git push origin master
Remendar un commit
Puede modificar el commit más reciente (enmendar) en la misma rama ejecutando:
gitadd -A # Para hacer uso de ammend los archivos deben de estar en staginggit commit --amend # Remendar último commit
Este comando sirve para agregar archivos nuevos o actualizar el commit anterior y no generar commits innecesarios.
.
También es una forma sencilla de editar o agregar comentarios al commit anterior porque abrirá la consola para editar el commit anterior.
.
Nota: Es una mala práctica hacer ammend de un commit que ya ha sido pusheado o pulleado del repositorio remoto, al momento de hacer ammend con algún commit que esté en remoto va a generar un conflicto que se va a arreglar haciendo un commit adicional y se perderá el beneficio del ammend.
Cierto, habrá problemas si se hace el push y después haces cambios.
gracias bro, soy tu fan
Y así, con git amend nadie sabe ese error tonto que cometiste y aquí nunca pasó nada 😎
si el caso es que únicamente olvidamos incluir archivos al commit y el mensaje que habíamos ingresado estaba bien, también podríamos ejecutar el siguiente comando:
git commit --amend --no-edit
Con el --no-edit además de todo lo que significa el --amend estamos diciéndole a git que utilice el mensaje que ya habíamos ingresado.
haha gracias, sirvió de mucho.
El código es:
git commit --amend --no-edit
git commit --amend “antes de que el chino se comiera la sopa de murcielago”
git reset octubre/2019
Mis apuntes de esta lección.
Reconstrucción de Commits
Si el último commit que hicimos tenía un error, por ejemplo de ortografía o quizá se nos olvidó agregar algo al código de ese commit podemos darle solución con el siguiente comando.
→ Modificar el mensaje del commit más reciente.
$ git commit --amend
→ Modificar el commit más reciente y su mensaje en la misma línea.
$ git commit --amend -m
Recordar que -m permite escribir un mensaje desde la línea de comandos sin tener que abrir un editor.
→ Modificar el commit sin modificar el mensaje de dicho commit.
$ git commit --amend --no-edit
El indicador --no-edit permite hacer correcciones el el código sin modificar el mensaje original.
Este comando es una manera práctica de modificar la información más reciente de nuestro repositorio.
No utilizar --amend para reconstruir commits que ya se encuentran en el repositorio remoto. Esto sería una mala práctica.
Muy util . Gracias :D
wow git --amend me hubiese ahorrado muchos commit en el pasado
Si :)
Apuntes 😅
$git commit --amend y AMEN ! jajajaja
ahahahhahahhahahha XD
 master)
utilizamos $() para imprimir en la consola de git "variables" que podemos obtener con ciertos comandos.
en el comando anterior, git merge-base nos va a indicar el punto exacto donde se creo la bifurcacion en nuestra historia (el punto exacto donde creamos la rama), para eso le vamos a dar el nombre de la rama en la que estamos actualmente (usando git branch --show-current se hace automaticamente por si acaso no nos acordamos) y la rama principal de nuestro repositorio, en este caso: master.
de esta forma, ejecutando ese comando es como si hicieramos: git rebase -i <hash del commit>
una vez ejecutado ese codigo, vamos a entrar en un dialogo similar a cuando debemos crear el mensaje para un commit nuevo. (un dialogo de VIM) en el dialogo podremos ver una lista con todos los commits que tenemos en nuestra rama y un mensaje donde se describen todas las opciones que tenemos.
Para editar un commit, basta con presionar la tecla i para entrar en modo edicion (igual que al crear el mensaje de un commit) y editar el texto del commit que queremos modificar.
como bien explico Freddy en un episodio, todo el texto que tenga un simbolo # significa que esta comentado, en el dialogo de vim veremos que nuestros commits aparecen todos comentados (con un simbolo #) esto es porque nosotros debemos eliminar el # y agregar la opcion que queramos ejecutar sobre ese commit.
por ejemplo, si tenemos un commit asi
#12345ABC "commit de ejemplo"
si queremos editar el contenido de este commit, debemos editar el texto del dialogo y hacer algo asi:
edit 12345ABC "commit de ejemplo"
luego de eso presionamos escape y salimos del dialogo como explica Freddy,
si te parece complicado tambien puedes salir de vim tecleando :wq (dos puntos + w + q)
al hacer esto, en nuestra consola nuestro head va a estar ubicado en el commit 12345ABC siguiendo con el ejemplo, ahora podemos ir a nuestro editor y realizar los cambios que queramos en el archivo.
una vez finalizados los cambios, debemos guardar los cambios en el stage haciendo git add como normalmente, y luego ingresar el comando git rebase --continue
ya para finalizar, al haber ingresado el rebase continue, veremos un dialogo de confirmacion, salimos del dialogo de la forma que explica Freddy o tecleando :wq y listo, nuestro commit quedo oficialmente modificado.
si en este momento hacemos git push, git nos va a arrojar un error. por que? porque nosotros acabamos de sobreescribir la historia, esto quiere decir que la historia de nuestro repositorio local es diferente a la del repositorio remoto.
como se soluciona? sencillo, debes forzar al repositorio remoto a que tome tus cambios.
esto lo hacemos con:
git push --force
una vez hecho esto habremos modificado exitosamente un commit sin necesidad de ensuciar la historia de nuestro repositorio.
esta tecnica puede ayudarte un sinfin de veces a salir de apuros o agregar cambios de ultimo momento sin hacer commits innecesarios, pero como todo, debes utilizarla con mucho cuidado ya que puedes causar problemas si la aplicas de la manera erronea.
saludos y espero les sirva el tip!!
Gracias por el aporte. Muy interesante, ya lo dejé en mis apuntes :P
Funciona solo para reparar el último commit o puede especificarse el id?