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


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

Затем, делая «git branch», я получил то, что выглядело так:

git branch
* (no branch)
  master

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

git checkout master

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

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


11
2017-08-20 16:34


Источник




Ответы:


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

git reflog show

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


12
2017-08-20 17:23



Я бы сделал git reflog без указания мастера. Возможно иметь фиксации, которые не привязаны к ветке, и в этом случае, скорее всего, это произошло. Вы можете проверить фиксацию в новой ветке, чтобы она имела путь к ней. - Jeff Ferland
Вы правы, наверное, лучше. Мое предположение из вопроса состояло в том, что он был на хозяине для совершения. Я обновил свой ответ. - CK.
Привет, спасибо! Я совершил огромный тираж ни одной ветви, а затем переключился на мастера, чтобы объединить его в ... и пошла моя ссылка. - Pascal
Прошло немало лет, но я тоже вскочил. Я снова переключился на мастер-ветку, и внезапно, пуф. Все мои 2 дня работы (т. Е. 8 часов aday) ушли. Спасибо огромное! - Falgantil


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

$ 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, прежде чем вы случайно его получите, просто для спокойствия.


5
2018-01-26 01:55



Просто проверка ветки не работала для меня. Мои изменения были правильно внесены в мою ветку функций. Тем не менее я не мог видеть их в своей рабочей области. Я, должно быть, потерял свои изменения каким-то другим способом. Однако я мог бы восстановить свои изменения, выполнив git reset --hard <commit-id>, Идентификатор commit - это алфавитный цифровой код в первом столбце git reflog, Видеть effectif.com/git/recovering-lost-git-commits, - Torsten


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

2
2018-06-16 18:32



Из многих способов, включая rev-list, только fsck помог найти безрисковую фиксацию. Большое спасибо. - temoto