Git: sembrava di essere in "(nessun ramo)" e poi ha perso i miei cambiamenti


11

Stavo cercando di passare dal mio spazio di lavoro Git a Github ma le mie modifiche aggiunte e impegnate non sembravano essere caricate.

Quindi, facendo un "ramo git" ho ottenuto qualcosa che assomigliava a questo:

git branch
* (no branch)
  master

Stupidamente, ho pensato di poter tornare con il padrone

git checkout master

e ora i miei cambiamenti sembrano essere andati. La mia filiale principale ha circa un giorno. E non sembra esserci modo di tornare a questo (nessun ramo).

Le mie modifiche sono perse? O c'è un modo per recuperarli?

Risposte:


13

Finché non hai fatto un git gc, allora non hai perso nulla. Tutto quello che devi fare è trovarlo di nuovo :) Cosa ottieni con:

git reflog show

Questo dovrebbe mostrare cosa è successo e l'id dei nodi mancanti.


2
Farei git reflog senza specificare il master. È possibile avere commit che non sono legati a una succursale e, in questo caso, è probabilmente quello che è successo. È possibile effettuare il checkout di un commit in un nuovo ramo in modo che abbia un percorso.
Jeff Ferland,

Hai ragione, probabilmente meglio così. La mia ipotesi dalla domanda era stata che era il maestro per il commit. Ho aggiornato la mia risposta.
CK.

Grazie! Ho impegnato una grande scorta in nessun ramo, poi sono passato al master per unirlo in ... e il mio riferimento è andato.
Pascal,

Sono passati un bel po 'di anni, ma anche io mi sono tuffato in questo. Sono tornato al ramo principale e all'improvviso, poof. Tutti i miei 2 giorni di lavoro (cioè 8 ore di ritardo) sono andati. Grazie mille!
Falgantil,

5

La risposta sopra è corretta. Questo è quello che ho fatto:

$ 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

Il "Oh No!" il momento è questo:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 è il ramo anonimo che appare come (nessun ramo). Per tornare indietro, basta fare un checkout git e il tuo vecchio pseudobranch viene ripristinato.

Ti consiglio di eseguire il backup del tuo repository git prima di farlo accidentalmente, solo per la tranquillità.


Il semplice controllo della filiale non ha funzionato per me. Le mie modifiche sono state apportate correttamente nel mio ramo delle funzionalità. Tuttavia non riuscivo a vederli nel mio spazio di lavoro. Devo aver perso i miei cambiamenti in qualche altro modo. Tuttavia, ho potuto recuperare le mie modifiche eseguendo git reset --hard <commit-id>. L'ID commit è il codice alfanumerico nella prima colonna di git reflog. Vedi 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>

Per molti aspetti, incluso rev-list, solo fsck ha aiutato a trovare commit senza branch. Grazie mille.
temoto,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.