La opción Git commit –amend en Git


Lección 30 / 53

La opción Git commit –amend en Git

Git Guía Git Guía Git español

Hemos dicho varias veces que el objetivo principal de Git es evitar la pérdida en un cambio de commit (es decir, guardado en el historial). Por otro lado, Git también está diseñado para ofrecer el control más completo sobre tu workflow de desarrollo, incluida la capacidad de definir exactamente el historial de tu proyecto.

Tomemos, por ejemplo, este historial de commit de un repository:

$ git log --oneline
5dd0865 make variable names more clear
35dec0e increase version
af75ac9 update indentation for checks from linter
edb709f profile mostly works, missing phone number
b2b95ad wip - unfinished
447cbfe (tag: v0.1.0) chore: release 0.1.0
67b2fd8 feat: implement login
66c8a99 feat: implement signup
8305e6c chore: init project

Se realizaron commit posteriores al que tenía la etiqueta v0.1.0 a medida que se completaban partes del trabajo, para no perder parte del progreso del trabajo. Meses o años después, no sería interesante conservar todos esos commit como una "instantánea" del proyecto.

Para situaciones como estas, Git ofrece comandos para poder reescribir el historial, sin embargo, hace explícito que el uso de dichos comandos puede conducir a la pérdida de contenido (aunque, en realidad, es muy raro y aún más que sea debido al propio Git).

Git ofrece dos posibles "alcances" para reescribir el historial: la última commit recién creada (a través de la opción --amend del comando git commit) o ​​cualquiera de las confirmaciones en el historial (a través del comando git amend)

Averigüemos cómo hacer que el historial del ejemplo anterior sea algo como esto:

$ git log --oneline
9b23ede (tag: v0.2.0) chore: release 0.2.2
7a250a0 feat: implement profile page
447cbfe (tag: v0.1.0) chore: release 0.1.0
67b2fd8 feat: implement login
66c8a99 feat: implement signup
8305e6c chore: init project

Git commit –amend en Git

La opción --amend del comando git commit en Git es un atajo que nos permite fusionar nuevos cambios en la staging area con el último commit que acabamos de guardar.

De acuerdo con la filosofía de Git, los nuevos cambios no se "agregan" a commit existente, sino que se crea una nueva confirmación que incluye todos los cambios.

[...]
$ git commit -m "implement send email button"
$ git log -n 2 --oneline
cc7f96f (HEAD -> main) implement new feature
a3478b1 fix a bug in old feature
$ git add public/icons/send_email_button.png
$ git commit --amend --no-edit
$ git log -n 2 --oneline
e34a234 (HEAD -> main) implement new feature
a3478b1 fix a bug in old feature

Se incluyó un archivo en la secuencia de comandos anterior en la última commit. El archivo a incluir se agregó al staging area (git add) y luego se ejecutó git commit --amend. En esta situación, donde simplemente se olvidó incluir un archivo en una commit (el archivo completo o los cambios en los archivos que ya están bajo control de versión), es de ayuda la opción --no-edit, que indica a Git que conserve el mensaje de commit existente.

Ten en cuenta el output de git log antes y después de amend: la id de la última commit ha cambiado, para Git es una nueva snapshot que reemplaza a la anterior.

Si no se especifica la opción --no-edit, el comando git commit --amend también puede ser útil para corregir cualquier error u omisión solo en el mensaje de commit.

Guía Git en español 1 ¿Qué es Git? 2 Nacimiento de Git 3 Principales características de Git 4 Línea de comando UI en Git 5 Cómo instalar Git 6 5 comandos Git para desarrolladores individuales 7 5 comandos Git para desarrollar en colaboración 8 Repository en Git 9 Commit en Git 10 Working Copy en Git 11 Staging Area en Git 12 Branch en Git 13 Remote en Git 14 Inicializar un nuevo repository con git init 15 Crear una copia de un repository remoto en Git con git clone 16 Configurar las opciones de Git con git config 17 El comando Git add en Git 18 El comando Git commit en Git 19 El comando Git diff en Git 20 El comando Git stash en Git 21 .gitignore : los archivos ignored en Git 22 El comando Git status en Git 23 El comando Git log en Git 24 El comando Git tag en Git 25 El comando Git blame en Git 26 El comando Git checkout en Git 27 El comando Git revert en Git 28 El comando Git reset en Git 29 El comando Git rm en Git 30 La opción Git commit –amend en Git 31 Git rebase –interactive en Git 32 Atajos para comandos frecuentes en Git 33 Repository compartido en Git 34 El modelo Fork & pull 35 El comando Git remote en Git 36 Los principales repository remote de Git: Github, Gitlab y Bitbucket 37 El comando Git fetch en Git 38 El comando Git push en Git 39 El comando Git pull en Git 40 El comando Git branch en Git 41 El comando Git checkout en Git 42 El comando Git merge en Git 43 Resolver un merge conflict en Git 44 Entender mejor el contenido de los commit durante un conflicto de merge en Git 45 Workflow Git centralizado 46 Workflow Git feature branching 47 Workflow Git trunk-based 48 Enfoque “forking” en Git 49 Gitflow en Git 50 Mensajes de commit en Git 51 Tagging & Versioning en Git 52 La opción merge en Git 53 La opción rebase en Git

© 2022 Aulab. Todos los derechos reservados • P.IVA: IT07647440721 • Política de privacidad