Git reset expliqué : soft, mixte et hard
git reset déplace votre branche vers un autre commit. Les trois modes diffèrent uniquement par ce qu'ils font avec vos fichiers. Voici ce que chacun conserve, lequel utiliser et comment récupérer lorsque vous réinitialisez trop loin.
Écrit par Kodmora
L'éditeur de logiciels derrière GitTree
- Annuler et récupérer
- Historique de validation
- Commits
Sur cette page
Les trois modes déplacent la branche actuelle vers le commit que vous nommez. `--soft` conserve chaque modification préparée, `--mixed` (valeur par défaut) les conserve dans votre dossier de travail sans préparation et `--hard` les ignore. Pour annuler votre dernière validation tout en conservant le travail, exécutez git reset --soft HEAD~1. Utilisez --hard uniquement lorsque vous êtes sûr, car il supprime définitivement les modifications non validées.
Quelle est la différence entre soft, mixte et dur ?
| Mode | Déménagements de branches | Zone de rassemblement | Dossier de travail | Utilisez-le pour |
|---|---|---|---|---|
--soft | Oui | Conservé | Conservé | Refaire les commits : tout reste indexé |
--mixed | Oui | Réinitialiser | Conservé | Supprimez la scène et re-sélectionnez ce que vous souhaitez valider |
--hard | Oui | Réinitialiser | Réinitialiser | Jetez le travail |
Git conserve trois copies de votre travail : l'historique des validations, la zone de préparation et le dossier de travail. La réinitialisation déplace toujours le premier. Le mode décide s’il réécrit également les deux autres.
Quand dois-je utiliser git reset --soft ?
Utilisez-le pour annuler les validations tout en gardant chaque modification par étapes, prête à être validée à nouveau. C'est le moyen le plus rapide d'écraser une branche en un seul commit :
# undo the last commit, keep the changes staged
git reset --soft HEAD~1
# squash everything since main into one commit
git reset --soft main
git commit -m "feat(search): quick open"Quand dois-je utiliser git reset --mixed ?
C'est la valeur par défaut, donc git reset signifie git reset --mixed. Utilisez-le pour annuler des validations et diviser le travail différemment, ou pour supprimer des fichiers :
# undo the last two commits, keep the changes unstaged
git reset HEAD~2
# unstage one file (the branch does not move)
git reset src/search.tsPour la suppression, git restore --staged src/search.ts fait le même travail et lit plus clairement.
Quand dois-je utiliser git reset --hard ?
# drop the last commit and its changes
git reset --hard HEAD~1
# match the remote exactly
git fetch origin
git reset --hard origin/mainComment supprimer un commit d’une branche ?
| Situation | Commande |
|---|---|
| Dernier commit, non poussé | git reset --hard HEAD~1 |
| Validation plus ancienne, non poussée | git rebase -i <sha>~1, puis marquez-le drop |
| Le commit est déjà poussé | git revert <sha> |
| Le commit est allé dans la mauvaise branche | git cherry-pick, puis réinitialisez l'ancienne branche |
git revert conserve l'historique intact, c'est donc le seul choix sûr sur une branche partagée. La réinitialisation d’une branche poussée nécessite une poussée forcée et brise les clones de vos coéquipiers. Rebase interactif et cherry-pick ont leurs propres guides.
Comment annuler une réinitialisation de git ?
Reset a déplacé la branche et le reflog se souvient où elle se trouvait :
git reflog
# 3e52f10 HEAD@{0}: reset: moving to HEAD~2
# 9b3c7d1 HEAD@{1}: commit: add search box
git reset --hard 9b3c7d1Cela ramène les commits, y compris après --hard. Les fichiers qui ont été préparés mais jamais validés peuvent parfois être trouvés avec git fsck --lost-found. Les changements qui n’ont jamais été organisés ont disparu. Annuler une réinitialisation, un rebase ou un commit couvre tous les cas.
Quelle est la différence entre réinitialiser, rétablir et restaurer ?
| Commande | Ce que ça fait | Réécrit l’histoire ? |
|---|---|---|
git reset | Déplace la branche vers un autre commit | Oui |
git revert | Ajoute un commit qui en annule un autre | Non |
git restore | Change les fichiers, jamais la branche | Non |
Comment réinitialiser une branche dans GitTree
Choisissez le commit
Cliquez avec le bouton droit sur le commit auquel la branche doit revenir et ouvrez Reset … to This Commit.
Choisissez le mode
Choisissez Soft : conserver toutes les modifications par étapes, Mixte : conserver les modifications dans le dossier de travail ou Difficile : ignorer toutes les modifications….
Annuler si nécessaire
GitTree enregistre d'abord votre travail sous
refs/ogt/trash, afin que Annuler puisse le restaurer, même après une réinitialisation matérielle.

Voir réinitialiser une branche vers un commit pour plus de détails, et la leçon sur les modes de réinitialisation pour vous entraîner sur un référentiel sécurisé.
Questions fréquemment posées
Que signifie HEAD~1 ?
Le commit une étape avant celui en cours. HEAD~3 est à trois pas en arrière. git log --oneline affiche les hachages si vous préférez nommer directement un commit.
Est-ce que git reset supprime les commits ?
Cela éloigne la branche d'eux, de sorte qu'ils cessent d'apparaître dans git log. Ils restent dans le reflog pendant au moins 30 jours par défaut, puis Git peut les supprimer.
Comment annuler mon dernier commit tout en conservant les modifications ?
Exécutez git reset --soft HEAD~1 pour les conserver en préparation, ou git reset HEAD~1 pour les conserver sans préparation.
Est-ce que git reset --hard est sûr ?
C'est sans danger pour un travail validé, que le reflog peut rapporter. Il n'est pas sûr pour les travaux non validés, qu'il supprime. Cachez ou validez d’abord si vous n’êtes pas sûr.
Puis-je réinitialiser une branche déjà poussée ?
Uniquement avec une poussée forcée, qui réécrit la branche pour tout le monde. Sur les branches partagées, utilisez plutôt git revert.
Sources
Les allégations concernant d'autres produits ont été vérifiées par rapport à leurs pages officielles sur 7 novembre 2026. Les prix et les fonctionnalités changent ; les pages des fournisseurs sont la source de vérité.
