Git: semblait être dans "(pas de branche)" puis a perdu mes modifications

11

J'essayais de passer de mon espace de travail Git à Github mais mes modifications ajoutées et validées ne semblaient pas être téléchargées.

Ensuite, en faisant une "branche git", j'ai obtenu quelque chose qui ressemblait à ceci:

git branch
* (no branch)
  master

Bêtement, je pensais que je pourrais revenir en maître avec

git checkout master

et maintenant mes changements semblent avoir disparu. Ma branche principale a environ un jour. Et il ne semble pas possible de revenir à cela (pas de branche).

Mes modifications sont-elles perdues? Ou existe-t-il un moyen de les récupérer?

interstar
la source

Réponses:

13

Tant que vous n'en avez pas fait git gc, vous n'avez rien perdu. Tout ce que vous avez à faire est de le retrouver :) Qu'est-ce que vous obtenez avec:

git reflog show

Cela devrait vous montrer ce qui s'est passé et l'ID du ou des nœuds manquants.

CK.
la source
2
Je ferais git reflog sans spécifier le maître. Il est possible d'avoir des validations qui ne sont pas liées à une branche, et dans ce cas, c'est probablement ce qui s'est produit. Vous pouvez extraire un commit dans une nouvelle branche afin qu'il ait un chemin d'accès.
Jeff Ferland
Vous avez raison, probablement mieux comme ça. Mon hypothèse de la question avait été qu'il était sur le maître pour le commit. J'ai mis à jour ma réponse.
CK.
Ouf, merci! J'ai commis une énorme cachette dans aucune branche, puis je suis passé à master pour le fusionner ... et ma référence était disparue.
Pascal
Ça fait pas mal d'années, mais moi aussi j'ai sauté dessus. Je suis retourné à la branche principale, et soudain, pouf. Tous mes 2 jours de travail (soit 8 heures par jour) ont disparu. Merci beaucoup!
Falgantil
5

La réponse ci-dessus est correcte. C'est ce que j'ai fait:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0

Le "Oh non!" moment est le suivant:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 est la branche anonyme qui apparaît comme (pas de branche). Pour y revenir, faites juste une vérification de git et votre ancien pseudobranch est restauré.

Je recommande de sauvegarder votre dépôt git avant de le gc accidentellement, juste pour la tranquillité d'esprit.


la source
Le simple fait de vérifier la succursale n'a pas fonctionné pour moi. Mes modifications ont été correctement effectuées dans ma branche de fonctionnalité. Je ne pouvais toujours pas les voir dans mon espace de travail. J'ai dû perdre mes changements d'une autre manière. Cependant, j'ai pu récupérer mes modifications en exécutant git reset --hard <commit-id>. L'ID de validation est le code alphanumérique dans la première colonne de git reflog. Voir effectif.com/git/recovering-lost-git-commits .
Torsten
2
# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>
Sebastian Castro
la source
De bien des façons, y compris rev-list, seul fsck a aidé à trouver une validation sans branche. Merci beaucoup.
temoto