Learn

Revenir en arrière

Git

checkout, reset, revert, reflog. Les outils de sauvetage quand tu as fait une bêtise.

Tu as commit du mauvais code, ou tu as détruit ton arborescence par un mauvais reset --hard ? Cette leçon te montre les commandes de sauvetage, dans l'ordre du moins destructif au plus destructif.

Annuler des modifications non commitées

Si tu as modifié un fichier mais pas encore stagé, et que tu veux revenir à la version commitée :

shell
git restore README.md

Si tu as déjà stagé des modifications et que tu veux les déstaguer (sans perdre le contenu) :

shell
git restore --staged README.md

Annuler un commit avec git revert (sûr)

git revert crée un nouveau commit qui inverse les effets du commit ciblé. L'historique est préservé, aucun commit existant n'est supprimé. C'est la méthode sûre, notamment si tu as déjà poussé.

shell
git revert HEAD

HEAD désigne le dernier commit. Tu peux aussi passer un hash : git revert a3f5b6c.

Remonter dans l'historique avec git reset

git reset déplace le pointeur de branche vers un commit antérieur. Il existe trois modes, du moins au plus destructif :

Mode --soft : les commits sont annulés, les fichiers restent staged. Utile pour regrouper des commits.

shell
git reset --soft HEAD~1

Mode --mixed (défaut) : les commits sont annulés, les fichiers sont déstagés mais les modifications restent.

shell
git reset HEAD~1

Mode --hard : les commits sont annulés et les modifications sont SUPPRIMÉES. Irrécupérable sans reflog.

shell
git reset --hard HEAD~1

Le filet de sécurité : git reflog

git reflog est ton dernier recours. Il liste tout ce que HEAD a pointé ces dernières semaines, même après un reset --hard. C'est la mémoire secrète de Git.

shell
git reflog

Tu vois une liste d'entrées avec des identifiants du type HEAD@{2}. Pour revenir à un état précis :

shell
git reset --hard HEAD@

Récupérer un fichier depuis un ancien commit

Si tu veux seulement récupérer un fichier dans son état d'un commit précis, sans toucher au reste :

shell
git restore --source a3f5b6c README.md

Le fichier revient dans son état du commit a3f5b6c, staged ou non selon tes options.

git-scm.com - git reset git-scm.com - git revert git-scm.com - git reflog

À côté

À côté · gitTravailler avec des branches

Coche les étapes pour débloquer la suite

Retour au cours