Salta el contingut
 

Commit amend

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Modificar l'últim commit (git commit --amend)

L'opció git commit --amend permet corregir l'últim commit realitzat. En concret, permet modificar-ne el missatge, afegir-hi fitxers nous o afegir-hi nous canvis, inclosos els fitxers modificats en aquest commit.

Internament, aquesta ordre crea un commit nou amb els canvis de l'Àrea de preparació i els del commit anterior, i el commit nou substitueix l'anterior.

El commit original se substitueix pel commit nou.

Si el commit original ja s'ha publicat en el repositori remot o té altres referències, aquestes referències no es modifiquen, i això pot provocar problemes en el repositori.

Funcionament de git commit --amend Funcionament de git commit --amend

Figura 1. Funcionament de git commit --amend.

La sintaxi és:

git commit --amend [-m <missatge>] [--no-edit]
  • [-m <missatge>]: (opcional) missatge nou per al commit.
  • [--no-edit]: (opcional) manté el missatge del commit original.

Documentació oficial: git commit --amend – Git

Preparació del repositori

El repositori dels exemples es prepara amb les ordres següents:

setup_amend.sh
#!/bin/bash

# Elimina el repositori si existeix
if [ -d ~/git_amend ]; then
    rm -rf ~/git_amend
fi

mkdir -p ~/git_amend
cd ~/git_amend
git init
git branch -m main
echo "# Git amend" > README.md
git add README.md
git commit -m "Commit inicial"
echo "- Canvi A" >> README.md
git commit -a -m "Canvi A"
echo "- canvi B" >> README.md
git commit -a -m "Canvi C"
git lga
jpuigcerver@fp:~ $ mkdir -p ~/git_amend
jpuigcerver@fp:~ $ cd ~/git_amend
jpuigcerver@fp:~/git_amend $ git init
Initialized empty Git repository in ~/git_amend/.git/
jpuigcerver@fp:~/git_amend (main) $ git branch -m main
jpuigcerver@fp:~/git_amend (main) $ echo "# Git amend" > README.md
jpuigcerver@fp:~/git_amend (main) $ git add README.md
jpuigcerver@fp:~/git_amend (main) $ git commit -m "Commit inicial"
[main (root-commit) c73703f] Commit inicial
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
jpuigcerver@fp:~/git_amend (main) $ echo "- Canvi A" >> README.md
jpuigcerver@fp:~/git_amend (main) $ git commit -a -m "Canvi A"
[main 4f61eca] Canvi A
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_amend (main) $ echo "- canvi B" >> README.md
jpuigcerver@fp:~/git_amend (main) $ git commit -a -m "Canvi C"
[main 348d5ee] Canvi C
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_amend (main) $ git lga
* 348d5ee - (0 seconds ago) Canvi C - Joan Puigcerver (HEAD -> main)
* 4f61eca - (0 seconds ago) Canvi A - Joan Puigcerver
* c73703f - (0 seconds ago) Commit inicial - Joan Puigcerver

Crea el nou repositori en una carpeta independent per evitar problemes amb els exemples i exercicis anteriors.

Exemple: Canviar el missatge de l'últim commit

El missatge de l'últim commit, Canvi C, no és correcte i es vol canviar a Canvi B.

jpuigcerver@fp:~/git_amend (main) $ git lga
* 348d5ee - (0 seconds ago) Canvi C - Joan Puigcerver (HEAD -> main)
* 4f61eca - (0 seconds ago) Canvi A - Joan Puigcerver
* c73703f - (0 seconds ago) Commit inicial - Joan Puigcerver
jpuigcerver@fp:~/git_amend (main) $ git commit --amend -m "Canvi B"
[main b1a44c4] Canvi B
 Date: Tue Jan 21 12:38:11 2025 +0100
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_amend (main) $ git lga
* b1a44c4 - (0 seconds ago) Canvi B - Joan Puigcerver (HEAD -> main)
* 4f61eca - (0 seconds ago) Canvi A - Joan Puigcerver
* c73703f - (0 seconds ago) Commit inicial - Joan Puigcerver
jpuigcerver@fp:~/git_amend (main) $ git show
commit b1a44c479806f8b538ebc0a86950e7533d9fe471
Author: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Tue Jan 21 12:38:11 2025 +0100

    Canvi B

diff --git a/README.md b/README.md
index 927b2f6..99116bf 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 # Git amend
 - Canvi A
+- canvi B

S'observa que l'últim commit té ara el missatge Canvi B i un identificador diferent.

Exemple: Modificar els canvis de l'últim commit

A més, el text del fitxer README.md no és correcte: es vol escriure la paraula canvi en majúscules.

jpuigcerver@fp:~/git_amend (main) $ cat README.md
# Git amend
- Canvi A
- canvi B
jpuigcerver@fp:~/git_amend (main) $ code README.md # (1)!
jpuigcerver@fp:~/git_amend (main) $ git diff
diff --git a/README.md b/README.md
index 99116bf..47cf8c5 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 # Git amend
 - Canvi A
-- canvi B
+- Canvi B
jpuigcerver@fp:~/git_amend (main) $ git add README.md
jpuigcerver@fp:~/git_amend (main) $ git commit --amend --no-edit # (2)!
[main 290f771] Canvi B
 Date: Tue Jan 21 12:38:11 2025 +0100
 1 file changed, 1 insertion(+)
jpuigcerver@fp:~/git_amend (main) $ git lga
* 290f771 - (0 seconds ago) Canvi B - Joan Puigcerver (HEAD -> main)
* 4f61eca - (0 seconds ago) Canvi A - Joan Puigcerver
* c73703f - (0 seconds ago) Commit inicial - Joan Puigcerver
jpuigcerver@fp:~/git_amend (main) $ git show
commit 290f771141eff61f5363beb24589da58550b466a
Author: Joan Puigcerver <j.puigcerveribanez@edu.gva.es>
Date:   Tue Jan 21 12:38:11 2025 +0100

    Canvi B

diff --git a/README.md b/README.md
index 927b2f6..47cf8c5 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
 # Git amend
 - Canvi A
+- Canvi B
  1. S'edita el fitxer README.md manualment amb l'editor de text.
  2. L'opció --no-edit manté el missatge del commit original.

Bibliografia

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.