81 votes

Abandon d'un ancien rebasement git et perte de commits depuis le début du rebasement

Merde ! Il y a environ une semaine, j'ai rebasé quelques commits en essayant de nettoyer mon référentiel, et apparemment je ne l'ai pas vraiment terminé. Aujourd'hui, une semaine et plusieurs commits plus tard, je suis allé dans rebase pour réorganiser quelques commits d'aujourd'hui, et il m'a dit que j'étais déjà au milieu d'un rebase.

Cela aurait dû être un signal pour copier mon dépôt juste au cas où. Mais je ne l'ai pas fait... à la place, j'ai exécuté git rebase --abort ce qui sonnait bien à l'époque. Eh bien, ce n'était pas bien. Il a annulé le rebasement d'il y a une semaine et a réinitialisé le HEAD du maître à l'ancien. Idiot !

J'ai plusieurs autres branches qui sont assez récentes, et j'ai poussé à distance plusieurs fois, mais les changements les plus récents semblent avoir disparu pour toujours. Je ne possède pas le niveau approprié de git-fu pour savoir s'il y a un moyen de récupérer mes changements.

Je suis foutu ?

EDIT - WOW ! Merci les gars ! git reflog est génial ! Je suis complètement rétabli... leçon apprise. Marquant la réponse de Tchalvak acceptée pour avoir été le premier à poster.

132voto

Kzqai Points 7484

Vérifiez git reflog . Vous pouvez remonter le temps en utilisant ces hashs de commit comme référence dans presque tous les cas.

Je copierais aussi physiquement le répertoire du dépôt git ailleurs pour faire des tests préliminaires afin de voir ce qui va fonctionner, de cette façon vous pouvez modifier ce que vous voulez sans perdre les fichiers non suivis ou mettre les choses dans un état que vous ne pouvez pas contrôler. ne peut pas revenir.

80voto

VonC Points 414372

Vous devriez être capable d'obtenir le SHA1 de vos commits les plus récents (qui ont disparu après le rebase --abort) avec un git reflog .

Vous pourrez alors réinitialiser votre branche actuelle à ces SHA1

# Suppose the old commit was HEAD@{2} in the ref log
git reset --hard HEAD@{2}

C'est un peu comme " Annulation d'une git reset --hard HEAD~1 ".

Voir aussi le " Guide illustré pour récupérer les commits perdus avec Git ", pour d'autres exemples de récupération.

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