Supprimer un commit Git déjà Push

Bonjour à tous,

Je partage avec vous ceci qui pourrait servir à quelqu’un : Je me suis un peu tirer les cheveux dessus :

Si vous avez fait un commit sur Git et que vous l’avez push mais que vous souhaitez revenir en arrière ce n’est pas trivial (en tout cas avec GitHub desktop). (Je pense qu’il faut faire attention avec cette commande si vous travaillez à plusieurs sur un répertoire, toutefois si vous êtes seul dessus je pense qu’il n’y a pas de problème) :

Il faut que vous récupériez l’id SHA du commit aux quel vous souhaitez revenir <commit_id_SHA>
Sur GItHub Desktop vous pouvez l’obtenir en faisant un clique droit sur le commit souhaitez et cliquer sur copy SHA

Ensuite vous allez dans le terminal dans le dossier de votre projet sur la branche ou vous souhaitez faire l’annulation (Normalement si vous avez ce problème vous êtes déjà dessus…) et vous tapez les commandes suivantes :

git reset --hard <commit_id_SHA>

puis

git push --force

Normalement le tour est joué :slight_smile:

4 « J'aime »

J’aimerais faire quelques remarques sur ton intervention qui est pertinente pour les personnes les moins aguerries de GIT.

Petit plus pratique.
Au lieu de te rendre sur GitHub Desktop, tu tape git log tu auras ta liste de tous tes derniers commit (même ceux qui ne sont pas push). A partir de là, tu pas également récupérer l’id SHA.

Aussi, il vaut mieux éviter le --hard. La commande git reset est utilisée pour annuler des commits tout en conservant les modifications dans le répertoire de travail. Elle déplace simplement la branche actuelle et l’index vers le commit spécifié, sans modifier les fichiers du répertoire de travail.
En revanche, la commande git reset --hard annule les commits, mais elle supprime également toutes les modifications non validées dans le répertoire de travail. Elle réinitialise le répertoire de travail et l’index pour correspondre exactement au commit spécifié.
Il faut donc faire attention avec cette option --hard.

Enfin, git push --force est utilisée pour forcer le push des modifications locales, même si la branche distante a changée. Ça peut être nécessaire dans certaines situations, mais ça doit être fait avec prudence, car ça peut écraser les modifications existantes dans la branche distante.

Tips

  • L’utilisation de git push --force peut entraîner la perte permanente de données sur le dépôt distant. Il est généralement déconseillé de forcer le push si d’autres contributeurs travaillent sur la même branche, car cela peut entraîner des problèmes de synchronisation.
  • Il est recommandé d’utiliser git push --force-with-lease plutôt que git push --force dans des environnements collaboratifs, car cela offre une certaine sécurité en s’assurant que personne n’a poussé des modifications depuis votre dernière opération de pull.
3 « J'aime »

Merci @AntoLhn ton complément est bien utile effectivement :slight_smile:

1 « J'aime »

Il m’est arrivé une nouvelle mesaventure avec git. Je travaillais sur une branche hors du main sur laquelle j’avais ajouté des fichiers dans .gitignore.
En repassant sur le main avec GitHubDesktop (pour regarder quelques petites choses) puis en revenant sur la branche sur laquelle je travaillais, j’ai perdu tout les fichiers que j’avais ajouté dans le .gitignore. Ce sont des fichiers que j’avais créés en travaillant sur la branche, et impossible de les retrouver. (heureusement pas trop long à refaire…).
J’ai peut être fait une fausse manip en changeant de branche, toutefois si quelqu’un connais le problème et sais comment éviter ce genre de mesaventure a la bascule entre différente branche, je suis à l’écoute :slight_smile: