Git: начебто, знаходився в "(немає гілки)", а потім втратив зміни


11

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

Потім, роблячи «гіт гілку», я отримав щось таке:

git branch
* (no branch)
  master

По-дурному, я думав, що можу повернутися до майстра

git checkout master

і тепер мої зміни, здається, пішли. Моєму господарському відділенню близько дня. І, здається, немає способу повернутися до цього (немає гілки).

Чи втрачено мої зміни? Або є спосіб їх відновити?

Відповіді:


13

Поки ви цього не зробили git gc, значить, ви нічого не втратили. Все, що вам потрібно зробити, це знайти його знову :) Що ви отримуєте:

git reflog show

Це повинно показати вам, що сталося, та ідентифікатор відсутнього (-ів) вузла (-ів).


2
Я б робив git reflog, не вказуючи майстра. Можна мати коміти, які не прив’язані до гілки, і в цьому випадку це, мабуть, сталося. Ви можете отримати комісію в новій гілці, щоб вона мала шлях до неї.
Джефф Ферланд

Ти маєш рацію, напевно, так краще. Моє припущення з цього питання було те, що це було головним завданням. Я оновив свою відповідь.
СК.

О, дякую! Я вчинив величезну сховище ні в одній гілці, потім перейшов до майстра, щоб об'єднати його в ... і пішов, моя довідка була.
Паскаль

Минуло досить багато років, але я теж в це вскочив. Я повернувся назад до майстра гілки, і раптом, пуф. Всі мої 2 дні роботи (тобто 8 годин вдень) минули. Дуже дякую!
Falgantil

5

Наведена відповідь правильна. Ось що я зробив:

$ 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 і ваш старий псевдобранш відновиться.

Рекомендую створити резервну копію вашого сховища git до того, як ви випадково його gc, лише для спокою.


Просто перевірка філії не працювала для мене. Мої зміни були правильно внесені в мою гілку функцій. І все-таки я не міг їх побачити у своїй робочій області. Я, мабуть, втратив свої зміни якимось іншим способом. Однак я міг відновити зміни, виконавши git reset --hard <commit-id>. Ідентифікатор фіксації - це альфа-числовий код у першому стовпці git reflog. Див. Effectif.com/git/recovering-lost-git-commissions .
Торстен

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>

З багатьох способів, включаючи rev-list, лише fsck допоміг знайти комісію без філій. Велике спасибі.
temoto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.