14/03/2024

3. Bonus: modifier un ancien commit - fixup

Lu 1935 fois Licence Creative Commons

Ajouter des modifications à un ancien commit

La commande rebase est très pratique pour réécrire son historique local, au point de pouvoir reordonner les commits ou d'en fusionner (on emploiera le terme "squash").
Aussi, la commande commit est pratique avec l'option --amend pour ajouter des modifications au dernier commit.

Un commit fixup suivi d'un rebase permettra de mélanger les 2 comportements décrits plus haut: ajouter des changements à un ancien commit (qui n'est pas nécessairement le dernier).

1. Commit

Commencer par ajouter les modifications au staging:

git add commit/staging.md

Puis créer un commit avec l'option --fixup en ciblant le commit auquel ajouter les modifications:

git commit --fixup=bbd7c93
[output][master 3437913] fixup! Ajoute une documentation sur le staging
[output] 1 file changed, 6 insertions(+)

Résultat:


2. Rebase

Effectuer maintenant un rebase, avec les options --interactive et --autosquash:

git rebase --interactive --autosquash bbd7c93^

L'option --autosquash va automatiquement placer le commit fixup dans l'historique réécrit pour qu'il soit fusionné avec le commit cible:

pick bbd7c93 Ajoute une documentation sur le staging
fixup 3437913 fixup! Ajoute une documentation sur le staging
pick fff3c3f Ajoute une feuille de triche
pick daaad19 Ajoute un conseil au README

# Rebase d91d190..3437913 onto daaad19 (4 commands)
# ...

Représentation:

Après rebase, le commit fixup aura été fusionné au commit cible.

Résultat:


Attention: rebase va réécrire l'historique (les hashs des commits suivant le "fixup" ont changé). Ne jamais réécrire l'historique qui a déjà été partagé avec votre équipe ! Ce type d'opération est à réaliser uniquement pour les commits locaux.


Partie pratique

  1. Modifier le fichier commit/staging.md et enregistrer les modifications sur l'ancien commit auquel le fichier a été créé.

  2. Annuler le commit qui ajoutait le fichier commit/commit.md.

  3. Créer un fichier cancel.md dans lequel résumer ce que vous avez retenu des techniques d'annulations avec Git. Ajouter le fichier dans un nouveau commit.