Comment effectuer la réécriture des modifications sur la branche principale (main branch) ?
sobes.tech IA
Réponse de l'IA
Utilisez git revert ou git rebase (en mode "interactif", ou git rebase --onto pour des scénarios plus complexes) suivi de git push -f.
git revert crée un nouveau commit annulant les modifications des commits spécifiés. C'est une option plus sûre, car elle conserve l'historique.
# Annuler le dernier commit
git revert HEAD
# Annuler un commit spécifique par son hash
git revert <commit-hash>
# Annuler une plage de commits (sauf le dernier)
git revert <hash-initial>..<hash-final>
# Annuler une plage de commits (incluant les deux)
git revert -n <hash-initial>^..<hash-final>
# Annuler les modifications en les appliquant en une seule fois sans créer de commits séparés pour chaque annulation
git revert -n <commit-hash-ou-rang>
# Appliquer le commit créé
git commit -m "Revert changes"
git rebase permet de réécrire l'historique des commits. Il peut être utilisé pour supprimer, fusionner ou changer l'ordre des commits. Il faut faire preuve de prudence, surtout sur des branches partagées.
# Lancer un rebase interactif pour les N derniers commits
git rebase -i HEAD~N
# Dans l'éditeur qui s'ouvre, changer 'pick' en 'drop' à côté des commits à supprimer.
# Enregistrer et fermer le fichier.
# Scénario avec rebase --onto : déplacer les commits A, B, C de la branche feature vers master,
# en ignorant le commit D qui était sur feature.
# Branche actuelle : feature
# X -- Y -- Z -- D -- A -- B -- C (feature)
# /
# W (master)
# Objectif : X -- Y -- Z -- W -- A -- B -- C (master)
git rebase --onto master D feature
# Où :
# master - branche cible vers laquelle on déplace
# D - commit jusqu'auquel on exclut du déplacement sur la branche source
# feature - branche source dont on prend les commits pour déplacer
Après avoir appliqué git revert ou git rebase sur la branche principale, il sera nécessaire de forcer la poussée (git push -f ou git push --force-with-lease), car l'historique local a divergé de celui distant.
# Poussée forcée après rebase
git push -f origin main
# Poussée forcée plus sûre
git push --force-with-lease origin main
Important : Il est fortement déconseillé de réécrire l'historique sur la branche commune (main), car cela peut perturber le travail des autres développeurs qui ont déjà synchronisé leur copie avec la version précédente de l'historique. Il est préférable d'utiliser git revert. git rebase sur la branche principale ne doit être utilisé qu'en cas d'extrême nécessité et en étant pleinement conscient des conséquences, généralement après accord avec toute l'équipe.