Un coéquipier répondait « git reset —hard » à chaque question d’annulation, comme d’autres répondent « éteins et rallume ». Ça a marché deux fois. La troisième, c’était un vendredi aprème et une leçon de reflog dont personne ne se souvient avec plaisir. Le hub Undo Anything in Git de ce site est né de cette semaine-là — et il reçoit aujourd’hui un vrai outil.
Le générateur git undo est en ligne : trois questions en entrée, une commande exacte en sortie. Pas de compte, rien à envoyer — tout tourne dans ton navigateur. Dis si le commit était poussé, si tu gardes les changements, et si quelqu’un d’autre tire la branche ; il imprime le bon git reset, git revert ou sauvetage reflog, avec un avertissement là où la commande mord.
Pourquoi un outil pour quatre commandes ?
Parce que les données de recherche disent que les gens veulent la réponse, pas l’essai. Google Search Console montre ce site positionné sur « git reset last commit keep changes » en position 12,3 — 27 impressions en une semaine, zéro clic. La requête réclame une commande, et le chercheur fait défiler tout ce qui lui demande de lire. Un générateur répond en un écran.
Le même motif se répète dans toutes les variantes : « and keep changes », « but keep changes », « keep the file ». Les gens ne font pas une thèse sur le versioning. Ils ont un chantier, là, maintenant, et veulent le chemin le plus court vers la sortie.
Comment le générateur décide
Trois questions, reprises du guide revert-vs-reset :
- Où est le commit ? Non poussé, poussé, ou perdu de vue.
- Que deviennent les changements ? Gardés indexés, gardés non indexés, ou jetés.
- Qui d’autre tire cette branche ? La question qui sépare un rewrite propre d’un incident d’équipe.
La question de la branche partagée, c’est tout l’outil. Le reste, c’est du confort ; celle-là, c’est de la gestion de dégâts.
Ses réponses, en entier :
| Commande | Historique | Arborescence | Branche partagée ? |
|---|---|---|---|
git reset --soft HEAD~1 | recule de 1 | changements gardés, indexés | non — rewrite |
git reset HEAD~1 | recule de 1 | changements gardés, non indexés | non — rewrite |
git reset --hard HEAD~1 | recule de 1 | changements perdus | non — destructif |
git revert HEAD | ajoute un commit d’annulation | intacte | oui — le geste sûr |
git reflog + git switch -c recovery <sha> | rien perdu | restaurée depuis le reflog | sauvetage après n’importe quoi |
Les commandes qu’il imprime
Tous les cas couverts par le générateur, prêts à coller :
# commité, non poussé, garder les changements indexés
git reset --soft HEAD~1
# commité, non poussé, garder les changements non indexés
git reset HEAD~1
# poussé, d'autres tirent la branche — la seule annulation polie
git revert --no-edit HEAD~1..HEAD
git push
# commité puis perdu — le reflog sait pendant ~90 jours
git reflog
git switch -c recovery <sha-de-la-liste> La forme en plage HEAD~1..HEAD annule exactement les commits nommés sans les recréer un par un — bon à savoir même quand l’outil le tape pour toi.
Sous le capot
La logique est une table de décision, pas de la magie. Trois questions donnent dix-huit combinaisons ; la plupart retombent sur la même poignée de commandes, car « non poussé + jeter » et « poussé + branche à moi + jeter » ne diffèrent que par la queue force-with-lease. La page est une route statique — pas de serveur, pas d’analytics, pas de cookies — donc elle charge sur un téléphone dans une salle serveurs, là où arrivent la plupart des urgences git, et le bouton copier te rend le bloc exact avec ses commentaires d’avertissement.
Ce qu’il refuse de faire
Pas d’aide au rebase interactif — si tu réordes des commits, tu en sais déjà plus que ce que l’outil enseigne. Pas de chirurgie de stash ; ça a son propre guide. Et il refuse de deviner : quand la situation est « poussé sur une branche partagée », la seule commande proposée est revert, parce que les alternatives brûlent des équipes. Le guide long sur l’annulation d’un commit explique ce que chaque flag fait au reflog ; l’outil te refuse juste le mauvais choix à vitesse grande.
La source est sur github.com/mrsaynothing/git-undo — HTML et JavaScript bruts, pas de build, pas de dépendance. Fork, restyle, vole mon texte. La version sur ce site tourne avec la même logique en page statique SvelteKit.
S’il t’épargne une session reflog cette année, il aura payé l’aprème qu’il a coûté. S’il donne la mauvaise réponse sur un cas que tu rencontres, les issues du dépôt sont là pour ça.
FAQ
Que fait le générateur git undo ?
Il pose trois questions — le commit était-il poussé, gardes-tu les changements, quelqu'un d'autre tire-t-il la branche — et imprime la commande exacte : reset, revert ou un sauvetage par reflog.
git reset --hard est-il sûr ?
Sur des commits jamais poussés, oui — le travail abandonné reste accessible via git reflog pendant environ 90 jours. Sur une branche partagée, jamais : revert à la place.
Faut-il un compte pour l'outil ?
Non. C'est une page statique qui tourne entièrement dans ton navigateur — rien n'est envoyé, rien n'est journalisé.
— mrsaynothing
— mrsaynothing
Des builds, des casses, et ce qui a vraiment ship.
Discutez de cet article sur dev.to dev.to ↗
Recevez le prochain build log par e-mail
Un e-mail par article. Preuves et erreurs incluses.
qu'est-ce que c'est ?Mon agent a publié un article verrouillé. Resté en ligne un jour.
Ces notes vous plaisent ? Je vis de ce métier. recevoir la newsletter