2010-10-26 20 views
247

git branch -D branchName ile ihtiyacım olan bazı deneysel değişikliklerle yanlış şubeyi yeni sildim.Git geri alma yerel şube sil

Şubeyi nasıl kurtarabilirim?

+2

Sevindim Ben sadece lame- değilim bilmek o bunu kim yaptı (ve düzenli olarak bir kopyasına basmayı unutturdu) – Ray

+0

şimdi biz 3 yapıyor –

cevap

504

Şubenin son işleminin SHA1'ini bulmak için git reflog'u kullanabilirsiniz. Bu noktadan itibaren,

git branch branchName <sha1> 

Edit kullanarak bir şube yeniden oluşturabilirsiniz: @seagullJS diyor gibi branch -D komut size sha1 söyler, bu yüzden henüz terminali kapatmadıysanız kolay gerçek olur. Örneğin bu siler ve ardından hemen master2 adında bir şube geri yükler:

[email protected] /C/MyRepo (master) 
$ git branch -D master2 
Deleted branch master2 (was 130d7ba). <-- This is the SHA1 we need to restore it! 

[email protected] /C/MyRepo (master) 
$ git branch master2 130d7ba 
+52

Git, dalın silinmesi durumunda SHA1'in ne olduğunu size söyler, bu nedenle yalnızca silerseniz, komut satırında yalnızca birkaç satır olabilir. – seagullJS

+1

Teşekkürler bu bana çalışma saatleri kurtardı! FYI git git reflog almak – albertski

+0

Çok teşekkür ederim, "kayıp" dosyaları buldum! – inix

34

sen şube geçen SHA1 biliyorsanız, sen solüsyon here açıklanan git reflog kullanarak SHA1 bulabilirsiniz

git branch branchName <SHA1> 

deneyebilirsiniz.

+1

sha1'i nasıl bulabilirim? –

+1

Yanıtımı, SHA1'in nasıl bulunacağı konusunda güncelledim. – Chetan

+0

Çok teşekkürler! –

2

İlk: .git dizin dahil olmak üzere tüm dizin yedekleme.

İkincisi: Kayıp taahhütlerin kimliğini edinmek için git fsck --lost-found'u kullanabilirsiniz. Üçüncüsü: Kaybolan işlemi yeniden donatmak veya birleştirmek.

Dördüncü: Her zaman -D önce iki kere düşünmek ya da git :)

hata bu tür kurtarmak için nasıl Yapabilirsin de read this good discussion ile --force.

DÜZENLEME: Bu arada, git gc'u (veya kendi başına çalışmasına izin verin - yani, git fetch veya benzeri bir şey) çalıştırmayın ya da işlerinizi sonsuza kadar kaybedebilirsiniz. Henüz silme itmek olmadıysanız

+1

1 ve 4 aşırı yüklü IMO'dur. – jwg

+0

Evet, bu yüzden etrafta olanları taşımak zorunda kalmamak için git'i kullanıyoruz. Yaptığınız her eylem hala size ait. – mateor

18

, sadece yapabilirsiniz: Sadece dalı sildiyseniz sizin terminalde böyle bir şey göreceksiniz

$ git checkout deletedBranchName 
+0

Bu yanıt, Git Uzantıları'nı "itmeye çalıştığınız dal bu uzaktan kumanda için yeni bir dal gibi görünüyor" diye seslendiriyor. Çok teşekkürler. – Omer

10

:

Deleted branch branch_name(was e562d13) 
  • burada e562d13 benzersiz bir kimlik (aka "SHA" veya "karma"), bununla birlikte silinen dalı geri yükleyebilirsiniz. Örneğin için

    git checkout -b <branch_name> <sha> 
    

    :

şube, kullanımını geri yüklemek için

git checkout -b branch_name e562d13 
3

Teşekkür, bu çalıştı.

git branch new_branch_name sha1

git ödeme new_branch_name

// görebilirsiniz benim eski benim eski dalda yapılan dosyaları