2 votes

GIT rebase a écrasé tous les changements

Cette fois-ci, je me suis vraiment trompé dans l'utilisation de GIT : j'ai travaillé quelques jours hors ligne sur un projet, et aujourd'hui j'ai essayé d'envoyer les modifications sur GitHub. D'une manière ou d'une autre, il y avait quelques conflits, que j'ai essayé de résoudre avec rebase. Je me suis retrouvé dans une branche REBASE 1/2, j'ai utilisé l'option skip et me suis déplacé vers REBASE 2/2, j'ai encore sauté et... eh bien, devinez quoi ? Je me suis tellement planté que j'ai fini par écraser mon projet local avec le dernier commit poussé sur GitHub, perdant ainsi 11 jours de travail !

Maintenant, puisque je suis sûr d'avoir mis en scène et validé mes changements avant le rebasement, je pensais qu'il y avait un moyen de récupérer ce désastre ; mais quand je vérifie avec git reflog, voici la première ligne :

2e73363 HEAD@{0} : rebase finished : returning to refs/heads/master

Le problème est que ce numéro de commit date d'il y a 11 jours, pas d'aujourd'hui !

Mes questions sont donc : - où sont mes commits d'aujourd'hui ? - Existe-t-il un moyen de revenir sur le rebasement que j'ai effectué aujourd'hui, en restaurant toutes mes modifications dans le projet ?

EDIT : voici le test complet de reflog :

$ git reflog
2e73363 HEAD@{0}: rebase finished: returning to refs/heads/master
2e73363 HEAD@{1}: rebase: checkout origin/master
2ff234f HEAD@{2}: commit: added .classpath to commit
8ddcf79 HEAD@{3}: commit: fixed few errrors
e5a6da9 HEAD@{4}: commit: adding hibernate to DAO classes
c6c10bf HEAD@{5}: commit: fixed problems with commit after detached head
0e527a6 HEAD@{6}: commit (merge): added Spring Security
f4ad11a HEAD@{7}: checkout: moving from tmp to master
a0a1597 HEAD@{8}: checkout: moving from master to tmp
f4ad11a HEAD@{9}: checkout: moving from new-branch to master
f4ad11a HEAD@{10}: checkout: moving from master to new-branch
f4ad11a HEAD@{11}: checkout: moving from master to master
f4ad11a HEAD@{12}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{13}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{14}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{15}: checkout: moving from master to a0a1597
f4ad11a HEAD@{16}: checkout: moving from a0a1597361522b25f4c12463f1bfa2673721eb7b to master
a0a1597 HEAD@{17}: commit: commit from detached head
c40dc30 HEAD@{18}: commit: added Spring Security to admin page
96e7903 HEAD@{19}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
f4ad11a HEAD@{20}: revert: Revert "commicommitt"
96e7903 HEAD@{21}: checkout: moving from 96e7903b784ae435c042abab33939327b081c138 to master
96e7903 HEAD@{22}: checkout: moving from master to 96e7903b784ae435c042abab33939327b081c138
96e7903 HEAD@{23}: commit: commicommitt
f9fc7a1 HEAD@{24}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d HEAD@{25}: commit (initial): Initial commit

et voici la sortie de reflog master :

$ git reflog master
2e73363 master@{0}: rebase finished: refs/heads/master onto 2e7336369502768f42174019bf1efbfc9b113d9f
2ff234f master@{1}: commit: added .classpath to commit
8ddcf79 master@{2}: commit: fixed few errrors
e5a6da9 master@{3}: commit: adding hibernate to DAO classes
c6c10bf master@{4}: commit: fixed problems with commit after detached head
0e527a6 master@{5}: commit (merge): added Spring Security
f4ad11a master@{6}: revert: Revert "commicommitt"
96e7903 master@{7}: commit: commicommitt
f9fc7a1 master@{8}: merge refs/remotes/origin/master: Fast-forward
ff7fc6d master@{9}: commit (initial): Initial commit

1voto

ryenus Points 679

Avez-vous vérifié ORIG_HEAD ? Il pointe probablement encore vers la tête de la branche avant le rebasement.

Néanmoins, git reflog master ou remplacer par votre branche, devrait montrer tous les commits sur lesquels master a travaillé.

0voto

Alex Reds Points 62

Ok, j'ai résolu le problème : en utilisant git reflog master j'ai trouvé le numéro de commit avant le rebasement ; ensuite, j'ai fait marche arrière sur ce commit avec git reset --hard .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X