2011-11-21 13 views
9

Po przeczytaniu rzeczy w książce Pro Git miałem kłopoty z reset.Git: resetuj - trudno teraz utknąłem w przeszłości

W zasadzie skończyłem robiąc reset --hard do wersji 12, która poprzedza.

Nie mogę wrócić do teraźniejszości lub ostatniego zatwierdzenia. Próbowałem już reset używając ORIG_HEAD i nawet karmiłem go w SHA1 wersji, aby przejść dalej.

Działa git status Otrzymuję: Twój oddział ma 12 potwierdzeń i może być szybko przekazany dalej.

Jak przenieść HEAD z powrotem do ostatniego zatwierdzenia?

Odpowiedz

4

Wygląda na to, że dokonałeś już 12 resetów, które zresetowałeś. Jeśli tak jest, to

git merge --ff-only REMOTE/BRANCH_NAME 

powinien pracować gdzie REMOTE to nazwa pilota (powszechnie origin) i BRANCH_NAME to nazwa aktualnej gałęzi.

+0

To się udało, nawet bez dostępu do sieci!Fajnie, ale czy naprawdę chciałbym zrozumieć, w jaki sposób można połączyć się ze zdalną gałęzią, nawet myśląc, że nie może się połączyć? – Gabe

+1

'Merge's są operacjami lokalnymi (to' pobieranie' wymaga połączenia sieciowego). –

11

Użyj reflog, aby dowiedzieć się, gdzie chcesz iść. Możesz go uzyskać za pomocą git reflog, a następnie zresetować do odpowiedniego zatwierdzenia. Zakładając, że nie zrobiłeś nic, odkąd dokonałeś resetu, powinien to zrobić.

+0

Dziękuję, ale to nie pomaga. Ostatnie zatwierdzenie pokazane przez reflog jest wersją, na której aktualnie jestem, nie pokazuje 12 brakujących :( – Gabe

+0

Co pokazuje poprzedni? Reflog śledzi zmiany w HEAD –

+0

Uruchomiłem 'git reset - hard 'HEAD @ {1}' 'a teraz zgodnie ze' git status' Jestem teraz tylko 11 zobowiązuje się do tyłu :) – Gabe

3

Innym sposobem (obok reflog) byłoby wykorzystanie faktu, że oddział zdaje się odwoływać od strony remotes przestrzeni nazw, jako pilota zdalnego oddziału, dlatego widać:

Your branch is behind by 12 commits and can be fast-forwarded. 

Prosty

git merge origin/yourBranch 

powinno wystarczyć, aby szybko przekazać numer HEAD lokalnego oddziału do miejsca, w którym znajdował się oddział zdalny.