Назад | Перейти на главную страницу

Git: казалось, что он находится в «(без ветки)», а затем потерял мои изменения

Я пытался подтолкнуть свою рабочую область Git к Github, но мои добавленные и зафиксированные изменения, похоже, не были загружены.

Затем, выполнив "ветку git", я получил что-то вроде этого:

git branch
* (no branch)
  master

По глупости я думал, что смогу вернуться к мастеру с

git checkout master

и теперь мои изменения, кажется, ушли. Моей основной ветке около суток. И, похоже, нет возможности вернуться к этому (нет ветки).

Мои изменения потеряны? Или есть способ их восстановить?

Пока вы не сделали git gc, значит, вы ничего не потеряли. Все, что вам нужно сделать, это снова найти :) Что дает:

git reflog show

Это должно показать вам, что произошло, и идентификатор отсутствующего узла (ов).

Приведенный выше ответ правильный. Вот что я сделал:

$ 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

"О нет!" момент такой:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 - это анонимная ветвь, которая отображается как (без ветки). Чтобы вернуться к нему, просто выполните git checkout, и ваша старая псевдобрань будет восстановлена.

Я рекомендую сделать резервную копию вашего репозитория git, прежде чем вы случайно его откроете, просто для спокойствия.

# 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>