« Restaurer un fichier signifie toujours revenir au dernier commit. »
Par défaut, git restore restaure le working tree depuis l’index. Avec –staged, il restaure l’index depuis HEAD.
01Observe les trois versions
./module2-git-undo-history.sh setup
cd /tmp/soria-git-undo-$USER/restore
git show HEAD:app.conf
git show :app.conf
cat app.conf
02Compare avant d’annuler
git diff -- app.conf
git diff --cached -- app.conf
git status --short
Le premier diff compare working tree et index. Le second compare index et HEAD.
03Restaure le working tree depuis l’index
git restore app.conf
cat app.conf
git status --short
La version expérimentale de l’index remplace la version cassée du working tree. Cette opération écrase la modification non commitée du fichier ciblé.
04Retire le fichier de l’index
git restore --staged app.conf
git status --short
git diff -- app.conf
La modification reste sur disque mais n’est plus préparée pour le prochain commit.
05Restaure depuis HEAD
git restore app.conf
git status --porcelain
cat app.conf
06Choisis explicitement une source
git restore --source=HEAD~1 -- README.md
git restore --source=HEAD --staged --worktree -- app.conf
La seconde commande aligne index et working tree sur HEAD. Utilise-la seulement après inspection des deux diffs.
Explique la perte évitée
Produis trois versions d’un fichier, puis montre comment conserver la version indexée, comment conserver seulement la version de travail et comment revenir entièrement à HEAD.
✓Ce que tu retiens
Une restauration doit nommer mentalement sa source et sa destination. Vérifie toujours working tree et index avant d’écraser un état local.