Choisir selon l’état du travail
| Situation | Commande | Résultat |
|---|---|---|
| Retirer un fichier de l’index | git restore --staged -- file.txt | Conserve les modifications du fichier. |
| Annuler le dernier commit local en gardant l’index | git reset --soft HEAD~1 | Recule la branche d’un commit. |
| Inverser un commit partagé | git revert <commit> | Ajoute un commit qui inverse la modification. |
Vérifiez git status et git log --oneline -5. Le reset présenté exige un commit parent et une branche privée. Un commit de fusion nécessite une analyse distincte : ne choisissez pas son parent principal au hasard.
Essayer un reset dans un dépôt de démonstration
Utilisez un nouveau dossier vide, en dehors du projet. L’exercice crée deux commits, retire le second de l’historique de la branche et conserve sa modification dans l’index.
git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "one\n" > note.txt
git add note.txt
git commit -m "First note"
printf "two\n" >> note.txt
git commit -am "Second line"
git reset --soft HEAD~1
git status --short
git diff --cachedRésultat attendu : M note.txt dans le statut court et une ligne two ajoutée dans le diff de l’index. Le fichier contient encore les deux lignes.
Éviter de perdre des modifications
git reset --hard peut supprimer des modifications non committées et écraser des chemins non suivis qui gênent l’opération. Il n’est pas nécessaire ici.
git restore -- file.txt remplace les modifications non indexées ; --staged agit sur l’index. Si une branche a été déplacée par erreur, examinez git reflog puis créez une branche de récupération sur l’ancien commit vérifié. Reflog ne récupère pas toutes les modifications non committées.