Git: “(şube yok)” görünüyordu ve sonra değişikliklerimi kaybettim


11

Git çalışma alanımdan Github'a geçmeye çalışıyordum, ancak eklenen ve taahhüt edilen değişikliklerim yüklenmedi.

Sonra, bir "git şubesi" yapmak gibi bir şey var:

git branch
* (no branch)
  master

Aptalca, ben tekrar efendiye geri dönebileceğimi düşündüm

git checkout master

ve şimdi değişikliklerim gitti. Usta şubem yaklaşık bir günlük. Ve buna geri dönmenin bir yolu yok (dal yok).

Değişikliklerim kayboldu mu? Yoksa onları kurtarmanın bir yolu var mı?

Yanıtlar:


13

A yapmadığınız sürece git gchiçbir şey kaybetmediniz. Tek yapmanız gereken tekrar bulmak :) Ne elde edersiniz:

git reflog show

Bu size ne olduğunu ve eksik düğümlerin kimliklerini göstermelidir.


2
Usta belirtmeden git reflog yapardım. Bir şubeye bağlı olmayan taahhütlerin olması mümkündür ve bu durumda, büyük olasılıkla olan buydu. Yeni bir şubeye verdiğiniz taahhüdü kontrol edebilirsiniz, böylece ona bir yol vardır.
Jeff Ferland

Haklısın, muhtemelen daha iyi. Sorudan aldığım varsayım, bu taahhüdün ustası olmasıydı. Cevabımı güncelledim.
CK.

Vay canına, teşekkürler! Hiçbir şubeye devasa bir depo yaptım, sonra birleştirmek için ustalaştım ... ve referansım gitti.
Pascal

Çok uzun yıllar oldu, ama ben de buna atladım. Efendi şubesine döndüm ve birdenbire puf ettim. Tüm 2 gün çalışmam (yani 8 saat aday) gitti. Çok teşekkür ederim!
Falgantil

5

Yukarıdaki cevap doğrudur. Ben de öyle yaptım:

$ 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

"Ah Hayır!" an şudur:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0, (şube yok) olarak gösterilen anonim daldır. Geri dönmek için sadece bir git kasası yapın ve eski taklitçiniz geri yüklendi.

Git deponuzu yanlışlıkla gc'den önce yedeklemenizi tavsiye ederim, sadece gönül rahatlığı için.


Sadece şubeyi kontrol etmek benim için işe yaramadı. Değişikliklerim özellik branşımda doğru şekilde yapıldı. Hala çalışma alanımda göremedim. Değişikliklerimi başka türlü kaybetmiş olmalıyım. Ancak, değişiklikleri uygulayarak kurtarabilirim git reset --hard <commit-id>. Taahhüt kimliği, öğesinin ilk sütunundaki alfa sayısal koddur git reflog. Bkz. Effectif.com/git/recovering-lost-git-commits .
Torsten

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 dahil birçok yoldan sadece fsck, şubesiz taahhütlerin bulunmasına yardımcı oldu. Çok teşekkür ederim.
temoto
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.