Git yerel şube silme işlemini geri alma


377

Sadece ihtiyacım olan bazı deneysel değişikliklerle yanlış dalı sildim git branch -D branchName.

Şubeyi nasıl kurtarırım?


7
Bunu yapan (ve düzenli olarak bir kopyasını uzaktan itmeyi unuttum) tek topalım değilim
Ray

Yanıtlar:


719

Şubenin son işleminin SHA1'ini bulmak için git reflog'u kullanabilirsiniz . Bu noktadan sonra, kullanarak bir şube oluşturabilirsiniz.

git branch branchName <sha1>

Düzenleme: @seagullJS'in dediği gibi, branch -Dkomut size sha1'i söyler, bu yüzden terminali kapatmadıysanız, gerçekten kolaylaşır. Örneğin, bu şu adlı bir dalı siler ve hemen geri yükler master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git, şube silindiğinde SHA1'in ne olduğunu söyler, bu yüzden sadece silerseniz, komut satırında birkaç satır yukarı olabilir.
seagullJS

bu şube sunucuda varsa, alternatif olarak, kullanabilirsinizgit branch branchName origin/branchName
Florian Castellane

Buna ek olarak, taahhüdü şubeye taşımak için git cherry-pick <sha1> kullanarak sona erdi
Akin Okegbile

54

Şubenin son SHA1'ini biliyorsanız, deneyebilirsiniz

git branch branchName <SHA1>

Buradagit reflog çözümde açıklanan SHA1'i bulabilirsiniz .


34

Silme işlemini henüz yapmadıysanız, şunları yapabilirsiniz:

$ git checkout deletedBranchName

Bu yanıt Git Uzantıları'nın "itmeye çalıştığınız dal bu uzaktan kumanda için yeni bir dal gibi görünüyor" hakkında kapanmasını sağlıyor. Çok teşekkürler.
Ömer

29

Şubeyi yeni sildiyseniz, terminalinizde böyle bir şey görürsünüz:

Deleted branch branch_name(was e562d13)
  • burada e562d13 benzersiz bir kimliktir (diğer adıyla "SHA" veya "karma"), bununla silinen dalı geri yükleyebilirsiniz.

Şubeyi geri yüklemek için şunu kullanın:

git checkout -b <branch_name> <sha>

örneğin :

git checkout -b branch_name e562d13 

4

İlk olarak .git dizini de dahil olmak üzere tüm dizininizi yedekleyin.

İkincisi: git fsck --lost-foundKayıp taahhütlerin kimliğini elde etmek için kullanabilirsiniz .

Üçüncüsü: Kaybedilen taahhüdü yeniden birleştirin veya birleştirin.

Dördüncü: -D veya --force git ile kullanmadan önce daima iki kez düşünün :)

Bu tür bir hatadan nasıl kurtulacağınızla ilgili bu iyi tartışmayı da okuyabilirsiniz .

DÜZENLEME: Bu arada, koşmayın git gc(veya kendi başına çalışmasına izin vermeyin - yani kaçmayın git fetchveya benzer bir şey) ya da taahhütlerinizi sonsuza kadar kaybedebilirsiniz.


1
1 ve 4 aşırı IMO'dur.
jwg

Evet, bu yüzden git'i kullanıyoruz, hepsini taşımak zorunda kalmamak için. Yaptığınız her işlem hala sizin için mevcuttur.
mateor

4

Teşekkürler, bu işe yaradı.

git şube new_branch_name sha1

git checkout Instagram Hesabındaki Resim ve Videoları new_branch_name

// eski iade ettiğim dosyaları eski şubemde görebilir


3

Bu adımları takip et:

1: Girin:

git reflog show 

Bu işlem tüm İşlem geçmişini gösterecektir, geri almak istediğiniz son işlemin yapıldığı sha-1'i seçmeniz gerekir

2: seçtiğiniz Sha-1 kimliğiyle bir şube adı oluşturun, örneğin: 8c87714

git branch your-branch-name 8c87714

0

Bu benim için çalıştı:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
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.