Exercice : Utilisation de Git Reset
Table des matières
- Objectifs
- Mise en place
- Exercice 1 : Reset --soft
- Exercice 2 : Reset --mixed
- Exercice 3 : Reset --hard
- Exercice 4 : Récupération avec reflog
- Solutions
1 - Objectifs
À la fin de cet exercice, vous saurez :
- ✅ Utiliser
git reset --softpour modifier un commit - ✅ Utiliser
git reset --mixedpour réorganiser le staging - ✅ Utiliser
git reset --hardpour annuler des modifications - ✅ Récupérer des commits perdus avec
git reflog
🔝 Retour à la table des matières
2 - Mise en place
Créer le dépôt de test
# Créer et entrer dans le dossier
mkdir exercice-reset
cd exercice-reset
git init
# Créer le fichier initial
echo "# Mon Projet" > README.md
git add README.md
git commit -m "Initial commit"
# Ajouter plus de contenu
echo "## Description" >> README.md
git commit -am "docs: add description section"
echo "## Installation" >> README.md
git commit -am "docs: add installation section"
echo "## Usage" >> README.md
git commit -am "docs: add usage section"
# Vérifier l'historique
git log --oneline
Vous devriez voir 4 commits :
abc1234 docs: add usage section
def5678 docs: add installation section
ghi9012 docs: add description section
jkl3456 Initial commit
🔝 Retour à la table des matières
3 - Exercice 1 : Reset --soft
Scénario
Vous venez de faire le commit "docs: add usage section" mais vous voulez modifier le message car il n'est pas assez descriptif.
🎯 Votre mission
- Utilisez
git reset --softpour annuler le dernier commit - Vérifiez que les modifications sont toujours dans le staging
- Refaites le commit avec un meilleur message
Instructions
# Étape 1 : Vérifier l'état actuel
git log --oneline
# Étape 2 : Annuler le dernier commit avec --soft
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 3 : Vérifier que les fichiers sont toujours staged
git status
# Étape 4 : Refaire le commit avec un meilleur message
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 5 : Vérifier le résultat
git log --oneline
Questions
- Après le reset --soft, les fichiers sont-ils dans le staging ou le working directory ?
- Le contenu de README.md a-t-il changé ?
💡 Voir la solution
# Étape 2
git reset --soft HEAD~1
# Étape 4
git commit -m "docs: add detailed usage section with examples"
Réponses :
- Les fichiers sont dans le staging (Changes to be committed)
- Non, le contenu n'a pas changé
🔝 Retour à la table des matières
4 - Exercice 2 : Reset --mixed
Scénario
Vous avez ajouté plusieurs fichiers au staging mais vous voulez les commiter séparément.
🎯 Votre mission
- Créez deux nouveaux fichiers et ajoutez-les au staging
- Utilisez
git resetpour les retirer du staging - Commitez-les séparément
Instructions
# Étape 1 : Créer deux fichiers
echo "Configuration settings" > config.txt
echo "Test file content" > test.txt
# Étape 2 : Ajouter les deux au staging
git add config.txt test.txt
# Étape 3 : Vérifier le staging
git status
# Étape 4 : Retirer les fichiers du staging avec reset
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 5 : Vérifier que les fichiers sont unstaged
git status
# Étape 6 : Commiter séparément
git add config.txt
git commit -m "chore: add config file"
git add test.txt
git commit -m "test: add test file"
# Étape 7 : Vérifier l'historique
git log --oneline
Questions
- Quelle est la différence entre
git resetetgit reset --mixed? - Les fichiers sont-ils supprimés du working directory après le reset ?
💡 Voir la solution
# Étape 4
git reset
# ou
git reset --mixed
# ou pour un fichier spécifique
git reset HEAD config.txt
Réponses :
- Aucune différence !
--mixedest l'option par défaut - Non, les fichiers restent dans le working directory
🔝 Retour à la table des matières
5 - Exercice 3 : Reset --hard
Scénario
Vous avez fait des modifications qui ne fonctionnent pas. Vous voulez tout annuler et revenir à l'état propre.
⚠️ Attention
Cet exercice va supprimer des données ! Assurez-vous d'être dans le dépôt de test.
🎯 Votre mission
- Faites des modifications "cassées"
- Utilisez
git reset --hardpour tout annuler - Vérifiez que tout est revenu à l'état propre
Instructions
# Étape 1 : Faire des modifications "cassées"
echo "BROKEN CODE" > broken.txt
echo "More broken stuff" >> README.md
git add .
git commit -m "wip: broken stuff"
# Vérifier l'état
git log --oneline
cat README.md
# Étape 2 : Annuler complètement avec reset --hard
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 3 : Vérifier que tout est revenu
git log --oneline
cat README.md
ls # broken.txt ne devrait plus exister
Questions
- Après le reset --hard, pouvez-vous récupérer le fichier broken.txt ?
- Comment s'assurer de ne pas perdre de travail important avant un reset --hard ?
💡 Voir la solution
# Étape 2
git reset --hard HEAD~1
Réponses :
- Oui, avec
git reflogetgit checkout <hash> -- broken.txt - Faire un
git stashavant, ou créer une branche de backup
🔝 Retour à la table des matières
6 - Exercice 4 : Récupération avec reflog
Scénario
Oups ! Vous avez fait un reset --hard et perdu un commit important. Utilisez le reflog pour le récupérer.
🎯 Votre mission
- Faites un commit "important"
- Supprimez-le avec reset --hard
- Récupérez-le avec reflog
Instructions
# Étape 1 : Créer un commit "important"
echo "VERY IMPORTANT DATA" > important.txt
git add important.txt
git commit -m "feat: add very important file"
# Noter le hash du commit
git log --oneline -1
# Étape 2 : Le supprimer "par erreur"
git reset --hard HEAD~1
# Vérifier qu'il a disparu
git log --oneline
ls important.txt # Erreur, fichier non trouvé
# Étape 3 : Utiliser reflog pour trouver le commit
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 4 : Récupérer le commit
# [ÉCRIVEZ LA COMMANDE ICI]
# Étape 5 : Vérifier la récupération
git log --oneline
cat important.txt
💡 Voir la solution
# Étape 3
git reflog
# Trouver la ligne qui dit "commit: feat: add very important file"
# Exemple: abc1234 HEAD@{1}: commit: feat: add very important file
# Étape 4 - Option A : Reset vers ce commit
git reset --hard abc1234
# Étape 4 - Option B : Créer une branche pour ce commit
git branch recovered abc1234
git merge recovered
🔝 Retour à la table des matières
7 - Solutions complètes
Exercice 1 - Solution
git reset --soft HEAD~1
git commit -m "docs: add detailed usage section with examples"
Exercice 2 - Solution
git reset
# ou
git reset --mixed HEAD
Exercice 3 - Solution
git reset --hard HEAD~1
Exercice 4 - Solution
git reflog
# Trouver le hash du commit perdu
git reset --hard <hash>
Points clés à retenir
| Mode | Garde le Working Dir | Garde le Staging |
|---|---|---|
--soft | ✅ | ✅ |
--mixed | ✅ | ❌ |
--hard | ❌ | ❌ |
💡 Astuce : En cas de doute, utilisez
--soft- c'est le plus sûr !