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.