Back

Annuler des commits Git après un push : Revenir en arrière en toute sécurité sur les dépôts distants

Annuler des commits Git après un push : Revenir en arrière en toute sécurité sur les dépôts distants

En tant que développeurs, nous avons tous vécu cette situation : vous effectuez un commit, vous le poussez vers un dépôt distant, puis vous réalisez que vous devez annuler ces modifications. Ne vous inquiétez pas, Git fournit des outils puissants pour vous aider à annuler les commits en toute sécurité, même après qu’ils ont été poussés. Dans cet article, nous explorerons divers scénarios et techniques pour annuler les commits Git et récupérer des erreurs, en assurant l’intégrité de l’historique de votre projet.

Points clés à retenir

  • Utilisez git reset pour annuler les commits locaux avant de les pousser.
  • Utilisez git revert pour annuler en toute sécurité les commits poussés en créant un nouveau commit qui inverse les modifications.
  • Évitez de forcer le push vers les dépôts distants, car cela peut causer des problèmes pour les collaborateurs.
  • Utilisez git reflog pour récupérer les commits perdus après un hard reset.

Comprendre les commits Git

Avant de nous plonger dans l’annulation des commits, passons rapidement en revue le fonctionnement des commits dans Git :

  • Un commit représente un instantané de votre dépôt à un moment précis.
  • Chaque commit possède un identifiant unique (hash SHA-1) et une référence à son ou ses commits parents.
  • Le pointeur HEAD fait référence au commit actuel sur lequel vous vous trouvez dans votre dépôt local.

Annuler le dernier commit local

Si vous n’avez pas encore poussé votre dernier commit et que vous souhaitez l’annuler, vous avez plusieurs options :

Utiliser git reset

  1. git reset --soft HEAD~1 : Cette commande déplace le pointeur HEAD d’un commit en arrière, en gardant les modifications du dernier commit en stage.
  2. git reset --mixed HEAD~1 (ou git reset HEAD~1) : C’est le comportement par défaut de git reset. Il déplace le pointeur HEAD d’un commit en arrière et retire les modifications du stage, mais les conserve dans votre répertoire de travail.
  3. git reset --hard HEAD~1 : Cette commande supprime toutes les modifications du dernier commit, en le supprimant effectivement de votre dépôt. Utilisez cette commande avec précaution, car elle supprime définitivement les modifications.

Utiliser git commit --amend

Si vous souhaitez modifier le dernier commit sans changer l’historique des commits, vous pouvez utiliser git commit --amend. Cela vous permet de mettre à jour le message de commit ou d’ajouter/supprimer des modifications au dernier commit.

# Effectuer les modifications nécessaires
git add .
git commit --amend

Annuler les commits qui ont été poussés

Lorsque vous devez annuler des commits qui ont déjà été poussés vers un dépôt distant, vous devez utiliser git revert pour créer un nouveau commit qui annule les modifications.

Utiliser git revert

  1. Identifiez le commit que vous souhaitez annuler à l’aide de git log.
  2. Utilisez git revert <commit-hash> pour créer un nouveau commit qui annule le commit spécifié.
git revert 1a2b3c4d
  1. Poussez le nouveau commit vers le dépôt distant.
git push origin main

Avertissements concernant le force push

Évitez d’utiliser git push --force pour écraser l’historique du dépôt distant, car cela peut causer des problèmes pour les autres collaborateurs. Au lieu de cela, utilisez git revert pour maintenir un historique de commits propre et transparent.

Annuler plusieurs commits

Pour annuler plusieurs commits, vous pouvez utiliser git revert avec une plage de commits ou effectuer un rebase interactif.

Annuler une plage de commits

git revert <oldest-commit-hash>..<latest-commit-hash>

Rebase interactif

  1. Utilisez git rebase -i <commit-before-the-one-you-want-to-change> pour démarrer un rebase interactif.
  2. Dans l’éditeur, remplacez pick par drop pour les commits que vous souhaitez supprimer.
  3. Enregistrez et quittez l’éditeur pour terminer le rebase.

Récupérer le travail perdu

Si vous avez accidentellement effectué un hard reset et perdu des commits, vous pouvez utiliser git reflog pour les récupérer.

  1. Exécutez git reflog pour afficher le journal de toutes les actions effectuées dans le dépôt.
  2. Identifiez le commit que vous souhaitez restaurer et notez son hash SHA-1.
  3. Utilisez git checkout <commit-hash> pour basculer vers ce commit.
  4. Créez une nouvelle branche pour enregistrer les modifications récupérées : git checkout -b recovered-branch.

Bonnes pratiques

  • Utilisez git revert au lieu de git reset lorsque vous annulez des commits poussés pour maintenir un historique propre.
  • Soyez prudent lorsque vous utilisez git reset --hard, car il supprime définitivement les modifications.
  • Communiquez régulièrement avec votre équipe pour éviter les conflits lors de l’annulation de commits sur des branches partagées.

FAQ

Utilisez `git revert -m 1 <merge-commit-hash>` pour annuler un commit de fusion, en spécifiant le numéro du parent (`-m 1`) à conserver.

Résolvez les conflits manuellement, mettez en stage les modifications, puis exécutez `git revert --continue` pour terminer l'opération d'annulation.

Conclusion

L’annulation des commits Git, qu’ils soient locaux ou poussés, est une exigence courante dans le workflow de tout développeur. En comprenant les différentes approches, telles que git reset, git revert et git reflog, vous pouvez gérer en toute confiance divers scénarios et maintenir un historique de projet propre et précis. N’oubliez pas de suivre les bonnes pratiques, de communiquer avec votre équipe et de toujours donner la priorité à l’intégrité de votre dépôt.

Ressources supplémentaires

Sérénité face aux bugs 🧘, OpenReplay

Revivez l’expérience utilisateur sur votre produit et résolvez les bugs rapidement.
Loved by thousands of developers