Aller au contenu principal

Exercice : Utilisation de Git Reset


Table des matières


  1. Objectifs
  2. Mise en place
  3. Exercice 1 : Reset --soft
  4. Exercice 2 : Reset --mixed
  5. Exercice 3 : Reset --hard
  6. Exercice 4 : Récupération avec reflog
  7. Solutions


1 - Objectifs



À la fin de cet exercice, vous saurez :

  • ✅ Utiliser git reset --soft pour modifier un commit
  • ✅ Utiliser git reset --mixed pour réorganiser le staging
  • ✅ Utiliser git reset --hard pour 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

  1. Utilisez git reset --soft pour annuler le dernier commit
  2. Vérifiez que les modifications sont toujours dans le staging
  3. 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

  1. Après le reset --soft, les fichiers sont-ils dans le staging ou le working directory ?
  2. 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 :

  1. Les fichiers sont dans le staging (Changes to be committed)
  2. 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

  1. Créez deux nouveaux fichiers et ajoutez-les au staging
  2. Utilisez git reset pour les retirer du staging
  3. 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

  1. Quelle est la différence entre git reset et git reset --mixed ?
  2. 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 :

  1. Aucune différence ! --mixed est l'option par défaut
  2. 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

  1. Faites des modifications "cassées"
  2. Utilisez git reset --hard pour tout annuler
  3. 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

  1. Après le reset --hard, pouvez-vous récupérer le fichier broken.txt ?
  2. 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 :

  1. Oui, avec git reflog et git checkout <hash> -- broken.txt
  2. Faire un git stash avant, 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

  1. Faites un commit "important"
  2. Supprimez-le avec reset --hard
  3. 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

ModeGarde le Working DirGarde le Staging
--soft
--mixed
--hard

💡 Astuce : En cas de doute, utilisez --soft - c'est le plus sûr !

🔝 Retour à la table des matières