2012-01-27 4 views
17

Sprawdziłem kolejną gałąź z aktualizacjami, a następnie wprowadziłem kilka zmian, wróciłem do głównego gita, a teraz zmiany zniknęły! Czy mogę je odzyskać? terminal był w zasadzie:Jak odzyskać zatwierdzenie z "odłączonego stanu głowy"?

$ git commit 
[detached HEAD 7c09e17] Fixed some stuff 
    files changed, insertions(+), deletions(-) 
$ git push master 
fatal: 'master' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
$ git checkout master 
Previous HEAD position was 7c09e17... Fixed some stuff 
Switched to branch 'master' 
$ git merge theother/directory 
+0

dup z http://stackoverflow.com/questions/4845505/gitx-how-do-i-get-my-detached-head-commits-back-into-master? – smparkes

Odpowiedz

30

Zakładając, że wciąż jesteś na mistrza:

git merge 7c09e17 

powinno wystarczyć. git jest zwykle dobry w przekazywaniu identyfikatorów zatwierdzeń, jeśli oglądasz terminal.

+0

kasie master, git merge 7c09e17, git checkout master, git push, wydaje się, że to rozwiąże, dzięki! – NoBugs

+0

i, z ciekawości, czy istnieje sposób, aby zobaczyć/anulować wszystkie te zatwierdzenia na moim komputerze lokalnym? – NoBugs

+8

@NoBugs, jeśli chcesz zobaczyć wszystkie zwisające zatwierdzenia (zatwierdza nie w oddziale), myślę, że chcesz 'git fsck --unreachable --no-reflogs'. –

7

Miałem problem z numerem podobnym do. Znalazłem git reflog, aby oszczędzać na życie. W przypadku pomaga zilustrować go używać, tu jest wyjście:

e3191c5 [email protected]{0}: checkout: moving from ec31ccf0735240d0cdc5a44fd443039c3caa43f0 to master 
ec31ccf [email protected]{1}: commit: Added code and data for simulation. 
781b9ee [email protected]{2}: checkout: moving from 3bd804e635b913840c71b7f8a33665460580d45f to 781b 
3bd804e [email protected]{3}: checkout: moving from master to 3bd804 

Moja sytuacja była nieco inna, że ​​ja miałem popełnić będąc w stanie jednorodzinnym HEAD począwszy od bardzo stary popełnić.

Gdybym po prostu chciał się połączyć ec31ccf0735240d0cdc5a44fd443039c3caa43f0 (aka ec31ccf, czyli tam, gdzie ja miał było) do master, myślę git merge ec31ccf lub git rebase ec31ccf może pracowali. Ale to byłoby w większości połączenie historii starożytnej w moim przypadku (z konfliktami scalającymi itp.).

Zamiast tego, po prostu chciałem odzyskać to, co zrobiłem na ec31ccf i git cherry-pick ec31ccf ładnie działało.