Annuler les commits poussés dans Git avec Reset et Revert

Ankit Raj Goyal 30 janvier 2023
  1. Annuler les commits poussés avec la commande git reset
  2. Annuler les commits poussés avec la commande git revert
  3. Annuler les commits poussés avec la commande git checkout
Annuler les commits poussés dans Git avec Reset et Revert

Nous montrons trois méthodes pour annuler les commits poussés à partir d’un référentiel distant dans Git. Nous utilisons les commandes git reset, revert et checkout pour cela.

Lorsque nous utilisons git reset, nous supprimons également toute trace des commits indésirables de l’historique du référentiel. Mais avec git revert, les commits d’origine et d’annulation restent dans l’historique.

Si on utilise git checkout, on annule les changements dans une nouvelle branche.

Annuler les commits poussés avec la commande git reset

Nous créons un dépôt undo_pushed_commits_local et le remplissons avec quelques (bons) commits sains.

mkdir undo_pushed_commits_local
git init

Ajoutez/modifiez ensuite des fichiers.

git add --all
git commit -m "Make healthy commit"

Ajouter/modifier plus de fichiers.

git add -all
git commit -m "Make another healthy commit"

Prenez des engagements sains

Nous allons maintenant pousser ces commits vers le dépôt undo-pushed-commits-remote sur GitHub.

git remote add undo-remote git@github.com:danielturidandy/undo-pushed-commits-remote.git

git push undo-remote master

Créer un alias pour le référentiel distant

Pousser vers le référentiel distant

Notre référentiel distant a maintenant deux commits.

Le référentiel distant a deux commits

Maintenant, faisons le mauvais commit.

echo "This is a bad addition" >> file1.txt
echo "This is a bad addition" >> file2.txt
git add -all
git commit -m "Make a bad commit"

Faire un mauvais commit

Nous poussons ce commit vers le référentiel distant.

git push undo-remote

Poussez le mauvais commit

Notre télécommande a le mauvais commit :

La télécommande a le mauvais commit

Nous revenons maintenant au dernier bon commit dans notre dépôt local. Nous utilisons l’option --hard pour supprimer toute trace des mauvais commits de l’historique des commits.

git log
git reset --hard  <SHA of the last good commit>

Réinitialiser au dernier bon commit

On push le local vers le dépôt distant avec l’option -f pour forcer le push.

git push -f undo-remote

La mauvaise validation est supprimée du référentiel distant

Cette méthode fonctionne mieux avec des référentiels privés ou des référentiels avec de petites équipes.

Les grandes équipes peuvent rencontrer des problèmes si certains développeurs tirent la télécommande vers leur environnement local après avoir poussé les mauvais commits avant de réinitialiser à un bon état. Ils n’ont pas d’historique des commits avec des informations sur les mauvais commits pour “corriger” leurs référentiels.

Annuler les commits poussés avec la commande git revert

Nous avons ici poussé quatre mauvais commits vers le référentiel distant.

4 mauvaises validations transmises à la télécommande

Nous pouvons utiliser revert pour annuler soit un seul mauvais commit, soit une série de mauvais commits.

revert crée un nouveau commit qui annule le commit indésirable. Les commits d’origine et inversés restent dans l’historique du référentiel.

Annuler un seul commit poussé avec revert

git revert <SHA of the commit we want to revert>

Un nouveau Commit qui inverse l&rsquo;ancien Bad Commit

Nous poussons maintenant cette modification dans le référentiel distant. N’oubliez pas d’utiliser l’indicateur -f pour vous assurer qu’aucun conflit ne survient.

git push -f undo-remote

Notre référentiel distant a maintenant le nouveau commit qui annule le mauvais commit.

Le nouveau Revert Commit dans le Remote Repo

Annuler une plage de commits poussés avec revert

git revert <SHA of the oldest commit to revert>..<SHA of the newest commit to revert>

Annuler une plage de commits

Cela annulera tous les commits dans la plage fournie (sans compter le commit le plus ancien, mais cela peut également dépendre de la version/plate-forme que vous utilisez.)

Les commits dans la plage fournie sont inversés avec de nouveaux commits

Nous poussons maintenant les modifications à la télécommande avec le drapeau -f.

git push -f undo-remote

Le référentiel distant a les validations de retour

Cette méthode est idéale pour les référentiels publics sur lesquels travaillent de grandes équipes. Comme les commits incorrects et annulés restent dans l’historique, les développeurs peuvent maintenir leurs référentiels locaux à jour avec tous les mauvais push/reverts.

Annuler les commits poussés avec la commande git checkout

Cette technique est un hack rapide qui bifurque une nouvelle branche sans les mauvais commits. C’est idéal pour les petites bases de code et si vous manquez de temps.

On checkout d’abord jusqu’au dernier bon commit.

git checkout <SHA of last known good commit>

Nous atteignons alors un état HEAD détaché au dernier bon commit connu dans l’historique du référentiel.

Nous avons ici maintenant fork une nouvelle branche de cet état.

git checkout -b branch_without_badcommits

Nous le poussons ensuite dans la télécommande dans une nouvelle branche.

git push -f undo-remote branch_without_badcommits

Créer et pousser une nouvelle branche sans les mauvais commits

Le référentiel distant a maintenant une nouvelle branche sans aucun mauvais commit.

Le dépôt distant a une nouvelle branche sans les mauvais commits

Article connexe - Git Undo