Un de mes collègues vient de vivre cette situation. Dans son cas, il y avait des commits en tête détachés -ils travaillent dans R-Studio-- et l'outil les a prévenus qu'ils pouvaient créer la branche avec telle ou telle référence SHA... mais comme la seule option était "Close" --duh !! c'était une boîte d'information-- ils ont fermé le dialogue et ont perdu l'information pour toujours...
Grâce à la reflog
nous avons pu constater que les changements n'étaient pas perdus. Mais dans notre cas, la git branch
n'a pas fonctionné comme prévu... ou un entrant git pull
a tout gâché d'une manière ou d'une autre. Nous avons dû transférer les changements de la reflog vers la branche nouvellement créée :
git cherry-pick 0b823d42..3cce27fc
qui a placé tous les commits que nous voulions dans la branche. Ensuite, nous pouvons fusionner la branche dans develop
sans problème.
Juste au cas où cela serait instructif pour quelqu'un, nous avons identifié les commits sur tête détachée dans le reflog
en regardant ceux qui se trouvent entre ceux marqués par "checkout" (qui identifient le déplacement des branches) :
e09f183b HEAD@{3}: pull: Fast-forward
b5bf3e1d HEAD@{4}: checkout: moving from lost_changes to develop
b5bf3e1d HEAD@{5}: checkout: moving from 3cce27fca50177a288df0252f02edd5da5ee64fd to lost_changes
3cce27fc HEAD@{6}: commit: add statistics
417a99a4 HEAD@{7}: commit: add test
0b823d42 HEAD@{8}: commit: new utility class
d9ea8a63 HEAD@{9}: checkout: moving from develop to d9ea8a635d4c2349fcb05b3339a6d7fad5ae2a09
b5bf3e1d HEAD@{10}: pull: Fast-forward
Ceux que nous voulions étaient HEAD@{8}
a HEAD@{6}
(les deux inclus). On les a donc obtenus par :
git cherry-pick 0b823d42..3cce27fc
Ensuite, la résolution habituelle de la fusion et le commit final nous ont laissé la branche lost_changes contenant le travail de tête détaché que nous pensions perdu. La fusion de cette branche dans le développement a été rapide cette fois.