Menu
Coddy logo textTech

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

ModeMoves branchResets stagingResets working tree
--softOuiNonNon
--mixed (default)OuiOuiNon
--hardOuiOuiOui

Syntaxe

CommandWhat it does
git reset --soft HEAD~1Annuler le dernier commit, garder les modifications dans l'index
git reset HEAD~1Annuler le dernier commit, garder les modifications hors de l'index
git reset --hard HEAD~1Annuler le dernier commit, supprimer les modifications
git reset <file>Retirer un fichier de l'index (conserver ses modifications)
git reset --hard origin/mainForcer la branche locale à correspondre à la distante

Cas courants

GoalCommand
Tout retirer de l'indexgit reset
Retirer un fichier de l'indexgit reset README.md
Reculer de 3 commits en conservant le travailgit reset --soft HEAD~3
Supprimer toutes les modifications locales depuis un commitgit reset --hard <hash>

FAQ git reset

Quelle est la différence entre --soft, --mixed et --hard ?
Les trois déplacent le pointeur de votre branche vers le commit cible ; ils diffèrent par ce qu'ils touchent en plus. --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 ?
Exécutez 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 ?
Pas depuis l'arbre de travail - --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 ?
Oui. Ouvrez le terminal playground pour exécuter 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.
Coddy programming languages illustration

Apprenez Git avec Coddy

COMMENCER