git restore

Instantanés de base

Restaurer des fichiers dans le répertoire de travail ou la zone de préparation


La commande 'git restore' remet des fichiers dans une version connue. Par défaut, elle remplace un fichier de travail par sa version préparée, ce qui efface vos modifications. Avec --staged, elle retire un fichier de la zone de préparation et garde vos modifications sur le disque. Avec --source, vous pouvez récupérer un fichier tel qu’il était dans n’importe quel commit. Elle a été ajoutée dans Git 2.23 pour reprendre la moitié « restauration de fichiers » de git checkout.

Synopsis

git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>...
[ ] facultatif| ou<arg> valeur à remplacer... répétable--flag option

Options

Cliquez sur une option pour la déplier

Débutant (2)

Restaurer la zone de préparation : retirer le fichier de la préparation. Votre fichier de travail n’est pas touché.

RecommandéLa façon sûre de retirer de la préparation : vos modifications restent sur le disque

Exemple

git restore --staged app.js

Restaurer le répertoire de travail (par défaut). Combiné à --staged, les deux sont restaurés.

Si nécessaireCible par défaut ; combinez avec --staged pour tout réinitialiser

Exemple

git restore --staged --worktree app.js

Intermédiaire (2)

Prendre le fichier dans le commit, la branche ou le tag donné au lieu de la zone de préparation.

RecommandéRécupérer un fichier de n’importe quel commit sans déplacer la branche

Exemple

git restore --source=HEAD~1 app.js

Choisir les morceaux (hunks) de façon interactive : git demande pour chaque modification.

Si nécessaireJeter certains morceaux et garder le reste

Exemple

git restore -p app.js

Choisir la bonne option

restore face aux anciennes commandes

Les mêmes actions, anciennes et nouvelles

CommandeAncien équivalentEffet
git restore app.jsgit checkout -- app.jsJeter les modifications non préparées
git restore --staged app.jsgit reset app.jsRetirer de la préparation, garder les modifications
git restore --source=HEAD~1 app.jsgit checkout HEAD~1 -- app.jsFichier d’un ancien commit

Exemples

Annuler des modifications

git restore app.js

Jeter les modifications non préparées de app.js.


Désindexer un fichier

git restore --staged app.js

Retirer app.js de la zone de préparation en gardant les modifications.


Fichier d’un ancien commit

git restore --source=HEAD~2 app.js

Récupérer app.js tel qu’il était deux commits plus tôt.

Exemples de workflows

1
git add .

Tout est préparé

2
git restore --staged README.md

README.md est retiré de la préparation

3
git commit -m "Add to cart"

Le commit laisse README.md de côté

Dépannage

error: pathspec 'x' did not match any file(s) known to git

Cause : Le fichier n’est pas suivi ou le chemin est faux

Vérifiez le chemin avec git status ; restore ne fonctionne que sur les fichiers suivis

J’ai restauré un fichier et perdu mes modifications

Cause : git restore écrase le fichier de travail

Les modifications non enregistrées sont perdues ; l’historique d’annulation de votre éditeur les a peut-être encore. La prochaine fois, faites d’abord git stash

Astuces et pièges

Bonnes pratiques

  • ✓Lancez git diff avant git restore pour voir ce que vous allez jeter.
  • ✓Utilisez git restore --staged pour retirer de la préparation — il ne touche jamais à vos modifications.
  • ✓Préférez git restore à git checkout pour les fichiers : son nom dit ce qu’il fait.

Erreurs fréquentes

  • ✗Lancer git restore <file> sur des modifications à garder — des modifications jetées ne se récupèrent pas.
  • ✗S’attendre à ce que git restore --staged efface votre modification : il la retire seulement de la préparation.
  • ✗Utiliser git restore pour annuler un commit — il restaure des fichiers ; pour les commits, utilisez git reset ou git revert.

FAQ

A:

git restore modifie des fichiers. git reset déplace la branche vers un autre commit (et peut aussi réinitialiser des fichiers).

A:

Pas pour les modifications de travail jetées : Git ne les a jamais stockées. Retirer de la préparation avec --staged ne perd rien.

A:

Git 2.23 ou plus récent. Sur les versions plus anciennes, utilisez git checkout -- <file> et git reset <file>.