Git Reset
Dernière mise à jour
git reset déplace la branche courante vers un commit différent et, selon le mode, met à jour l'index (staging area) et l'arbre de travail pour correspondre. Les trois modes ne diffèrent que par la portée de cette mise à jour : --soft déplace la branche et s'arrête, --mixed (le mode par défaut) réinitialise aussi l'index, et --hard écrase en plus vos fichiers de travail.
Comme --hard supprime le travail non commité, sachez quel mode vous voulez avant de l'exécuter. Essayez ces commandes en toute sécurité dans le terminal playground - un vrai shell dans votre navigateur.
Les trois modes
| Mode | Moves branch | Resets staging | Resets working tree |
|---|---|---|---|
--soft | Oui | Non | Non |
--mixed (default) | Oui | Oui | Non |
--hard | Oui | Oui | Oui |
Syntaxe
| Command | What it does |
|---|---|
git reset --soft HEAD~1 | Annuler le dernier commit, garder les modifications dans l'index |
git reset HEAD~1 | Annuler le dernier commit, garder les modifications hors de l'index |
git reset --hard HEAD~1 | Annuler le dernier commit, supprimer les modifications |
git reset <file> | Retirer un fichier de l'index (conserver ses modifications) |
git reset --hard origin/main | Forcer la branche locale à correspondre à la distante |
Cas courants
| Goal | Command |
|---|---|
| Tout retirer de l'index | git reset |
| Retirer un fichier de l'index | git reset README.md |
| Reculer de 3 commits en conservant le travail | git reset --soft HEAD~3 |
| Supprimer toutes les modifications locales depuis un commit | git reset --hard <hash> |
FAQ git reset
Quelle est la différence entre --soft, --mixed et --hard ?
--soft ne change rien d'autre, vos modifications restent donc dans l'index. --mixed (le mode par défaut) vide aussi l'index, les modifications sortent donc de l'index mais restent dans vos fichiers. --hard écrase en plus votre arbre de travail pour correspondre au commit cible, supprimant les modifications non commitées.Comment retirer un fichier de l'index avec git reset ?
git reset <file> (par exemple git reset README.md), ou git reset sans chemin pour tout retirer de l'index. Cela retire le fichier de l'index mais conserve vos modifications dans l'arbre de travail. Dans les versions récentes de Git, vous pouvez aussi utiliser git restore --staged <file>, qui fait la même chose de manière plus explicite.git reset --hard est-il réversible ?
--hard supprime définitivement les modifications non commitées. Cependant, le travail commité que vous avez supprimé avec reset peut généralement être récupéré : exécutez git reflog pour trouver le hash du commit, puis git reset --hard <hash> (ou créez une branche dessus). Les modifications non commitées qui n'ont jamais été ajoutées à l'index ni commitées ne peuvent pas être récupérées, alors utilisez --hard avec prudence.Quelle est la différence entre git reset et git revert ?
git reset réécrit l'historique en reculant la branche - acceptable pour des commits locaux, mais dangereux sur des commits que vous avez déjà poussés. git revert laisse l'historique intact et ajoute un nouveau commit qui annule un commit antérieur, ce qui est le choix sûr pour les branches partagées.Puis-je m'entraîner en ligne ?
git reset dans un vrai shell dans votre navigateur - rien à installer. Le cours Git interactif et gratuit de Coddy couvre aussi la réinitialisation et l'annulation des modifications étape par étape.