Git – A la recherche du commit perdu

« Aujourd’hui j’ai perdu mes commits ! »

C’est bien une phrase que je ne pensais jamais entendre avec Git tant son utilisation est pratique au quotidien. Et pourtant je l’ai dite pas plus tard qu’hier.

Aujourd’hui je ne suis pas là pour vous dire quelles sont les actions à ne pas faire pour éviter la perte de vos commits – puisque ça vous arrivera forcément un jour – mais pour vous aider à vous en sortir le jour J.

Rappel des faits

Voici en image l’histoire (ou presque) de ce qui s’est passé :

Histoire de la perte de commits

Histoire de la perte de commits

Rejouons l’histoire

git init
echo "First" > README.md
git add README.md
git commit -m "First one"
echo "Two" >> README.md
git add README.md
git commit -m "The second one"
git tag V1.0
 
# Ici commencent les commits que nous allons perdre
echo "Biiiiig work here" >> README.md
git add README.md
git commit -m "A lot of work here"
echo "A lot of work again and again" >> README.md
git add README.md
git commit -m "Again and again"
 
# Nous allons perdre nos deux derniers commits
git checkout V1.0
git branch -f master
git checkout master

Comment retrouver nos petits

La commande à sortir à ce moment là est « git reflog show » (ou simplement git reflog), elle permet de voir tout ce qui s’est passé récemment. Elle vous permettra 2 choses que j’apprécie :

  • savoir quelles actions nous ont amené à ce soucis;
  • retrouver les commits perdus.

Voici ce que me donne la commande :

git reflog show

git reflog show

Dans cet exemple, les deux premières lignes (commande checkout) donnes les actions qui m’ont amené à la perte des commits.

La troisième ligne (commande commit) correspond au dernier commit que j’ai fait avant mon erreur. C’est justement ce dernier commit qu’il faut récupérer. Les sept premiers caractères de la ligne me donnent le numéro du commit sur lequel je dois me rendre pour récupérer l’ensemble de mes commits perdus : 02cff20.

Il ne me reste qu’à taper la commande suivante :

git reset --hard 02cff20

Le tour est joué, j’ai retrouvé mes deux commits perdus :

Après récupération des commits

Après récupération des commits

 

Tagués avec : , ,
Publié dans Git
Un commentaire pour “Git – A la recherche du commit perdu
  1. lipki dit :

    Merci :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*