Git: sepertinya berada di "(tidak ada cabang)" dan kemudian kehilangan perubahan saya

11

Saya mencoba untuk mendorong dari ruang kerja Git saya ke Github tetapi perubahan saya yang ditambahkan dan dikomit sepertinya tidak diunggah.

Kemudian, melakukan "git branch" saya mendapatkan sesuatu yang tampak seperti ini:

git branch
* (no branch)
  master

Dengan bodohnya, saya pikir saya bisa kembali menjadi guru

git checkout master

dan sekarang perubahan saya sepertinya sudah hilang. Cabang master saya berumur sekitar satu hari. Dan sepertinya tidak ada cara untuk kembali ke ini (tidak ada cabang).

Apakah perubahan saya hilang? Atau adakah cara untuk memulihkannya?

interstar
sumber

Jawaban:

13

Selama Anda belum melakukan git gc, maka Anda tidak kehilangan apa pun. Yang perlu Anda lakukan adalah menemukannya lagi :) Apa yang Anda dapatkan dengan:

git reflog show

Itu akan menunjukkan kepada Anda apa yang terjadi, dan id dari node yang hilang.

CK.
sumber
2
Saya akan melakukan git reflog tanpa menentukan master. Dimungkinkan untuk memiliki komitmen yang tidak terikat pada cabang, dan dalam hal ini, itulah yang mungkin terjadi. Anda dapat checkout komit ke cabang baru sehingga memiliki jalan untuk itu.
Jeff Ferland
Anda benar, mungkin lebih baik seperti itu. Asumsi saya dari pertanyaan adalah bahwa itu adalah master untuk komit. Saya telah memperbarui jawaban saya.
CK.
Wah, terima kasih! Saya melakukan simpanan besar ke tidak ada cabang, kemudian beralih ke master untuk menggabungkannya ... dan pergi referensi saya.
Pascal
Sudah cukup banyak tahun, tetapi saya juga melompat ke ini. Saya beralih kembali ke cabang utama, dan tiba-tiba, puf. Semua 2 hari kerja saya (yaitu, 8 jam aday) hilang. Terima kasih banyak!
Falgantil
5

Jawaban di atas benar. Inilah yang saya lakukan:

$ 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

"Oh Tidak!" momen adalah ini:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 adalah cabang anonim yang muncul sebagai (tidak ada cabang). Untuk kembali ke sana, lakukan saja checkout git dan pseudobranch lama Anda telah dipulihkan.

Saya sarankan mencadangkan repositori git Anda sebelum Anda membuatnya secara tidak sengaja, hanya untuk ketenangan pikiran.


sumber
Cukup memeriksa cabang tidak bekerja untuk saya. Perubahan saya dibuat dengan benar di cabang fitur saya. Tetap saya tidak bisa melihat mereka di ruang kerja saya. Saya pasti telah kehilangan perubahan saya dengan cara lain. Namun, saya bisa memulihkan perubahan saya dengan mengeksekusi git reset --hard <commit-id>. ID komit adalah kode alfanumerik di kolom pertama git reflog. Lihat 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>
Sebastian Castro
sumber
Dari banyak cara termasuk rev-list, hanya fsck yang membantu menemukan commit tanpa cabang. Terima kasih banyak.
temoto