Git bozuk ana şube


9

Git depomu bir Visual Studio projesi için Windows 7'de gitExtensions kullanarak açıyorum. Aniden boş. Depo var, ancak tüm taahhütlerim kayboldu.

Ben grafik arayüzü kullanıyorum ve bu güncelleme beri ilk kez açtım inanıyorum.

Taahhütlerimi geri almak için ne yapacağımdan emin değilim.

Yazdığımda

git log 

Alıyorum

ölümcül: hatalı varsayılan düzeltme 'HEAD'

Güncelleme /programming/1545407/recovering-broken-git-repository
baktıktan sonra denedim

git fsck

geri döndü:

hata: Geçersiz HEAD
ölümcül: gevşek nesne 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (.git / obj ects / 36 / b7d9e1ca496bcb864c0b9c8671fcec97fbda31 içinde depolandı) bozuk

İade taahhütleri:

hata: başvuru çözümlenemiyor HEAD: Böyle bir dosya veya dizin yok
ölümcül: HEAD ref kilitlenemiyor

ve ana şube dönüşlerini günlüğe kaydetme

$ git log master uyarısı: bozuk ref ref / heads / master yoksayılıyor. uyarı: kırık ref ref / kafaları / master yoksayılıyor. fatal: belirsiz argüman 'master': bilinmeyen düzeltme veya çalışma ağacında olmayan yol. Yolları düzeltmelerden ayırmak için '-' kullanın

Sadece alakalı olabilecek şeyleri yapıştırmaya devam edeceğim

$ git reflog master
uyarısı: bozuk ref ref / heads / master yoksayılıyor.
uyarı: kırık ref ref / kafaları / master yoksayılıyor.
fatal: belirsiz argüman 'master': bilinmeyen düzeltme veya çalışma ağacında olmayan yol.
Yolları düzeltmelerden ayırmak için '-' kullanın

Daha olası yararlı bilgi: her zaman bozuk dosyayı silmek başka bir yer alır. Ana dalın yanlış bir şeye işaret etmesi ile ilgili bir şey olduğunu düşünmeye başladım. çünkü sanırım baş ustayı işaret ediyor.

Bir gün sonra:
Eşimi buna aldım, kütüklerden geçebildi ve kütüklerdeki karmaların klasördeki nesnelere uymadığını söyledi. Usta dalı günlüklere veya bunun gibi bir şeye sıfırlamayı denedi, biraz kayboldum. Umarım faydalıdır



1
@heavyd lütfen güncellemeyi kontrol edin
MrJD

Yanıtlar:


3

Depo var, ancak tüm taahhütlerim kayboldu.

Tam olarak ne demek istiyorsun? Çalışan ağaç hala orada mı? Var mı .git/? İçinde dosya var mı?

Gönderdiğiniz iletiler dosyanın .git/HEADmevcut olmadığını gösterir. Çalışma ağacının beklenen durumunu (kontrol ettiğiniz şeyi) tanımlar. Eğer bu dosya kaybolduysa, git nerede olduğunuzu bilmiyor.

Bu içerikle dosyayı kendiniz oluşturmayı deneyebilirsiniz: ref: refs/heads/master

Farklı bir dalda bulunuyorsanız, "master" ı şube adıyla değiştirmeniz yeterlidir. Eğer bir dalda olmasaydınız, daha karmaşık olurdu.

.git/logs/HEADHEAD durumlarını kaydeder, daha sonraki satırlar altta olur. Bu örnek satırda bir ödeme gösterilmektedir: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <rainer.blome@wherever.you.are.com> 1346938344 +0200 checkout: moving from master to MySuperBranch

Öndeki SHA1'ler taahhütleri ifade eder. Bunları, örneğin şube günlüğünde bulabilmeniz gerekir .git/logs/refs/heads/master.

Verdiğiniz git reflog çıktısı refs/heads/masterda eksik. Tek içeriğinin, en son taahhütlerin SHA1'i (ve bir yeni satır) olması gerekiyordu. Örneğin, en son SHA1'i şube günlüğünün sonunda bulabilirsiniz .git/logs/refs/heads/master.


2

.Git / HEAD varsa ve içeriği ref: refs/heads/masterrefs / heads / master dosyasını kontrol ederse, son işlemin sha1'ini içermelidir.

Bu dosya bozuksa ve NULL karakterlerle doluysa Bu dosyayı düzenleyin ve en son işlemin sha1'ini .git/logs/HEADveya son işlemden önceki bir sha1'ini koyun .

Sonra yap git reset --hard 'sha1 of the commit that you selected'


gerçekten NULL karakterlerle doluydu, bu yüzden önceki komutun sha1'ini koydum, ancak git sıfırlamayı yapmak "hata: update_ref ref 'HEAD' için başarısız oldu: ref 'HEAD' ı kilitleyemiyor: referans çözümlenemiyor HEAD: Geçersiz argüman "
fantastik

1

Repo bozulmuş gibi görünüyor. Yapılacak en kolay şey, repo'nuzu bir yedeklemeden kurtarmak veya repoyu orijinal kaynaktan yeniden klonlamaktır (repoda tonlarca işiniz olmadığı varsayılarak).

Yeniden başlatma / klonlama bir seçenek değilse, Pro Git'i (ücretsiz çevrimiçi kitap veya basılı sürüm ) okumanızı tavsiye ederim . Tüm kitap çok bilgilendiricidir, ancak Git'in dahili olarak nasıl çalıştığını anlamak için son bölüme bakınız. Git'in nasıl çalıştığını anladıktan sonra, Linus'un bozuk nesneleri kurtarma hakkındaki talimatlarına bakın .


Ne yazık ki gizli dosyaları yedeklemiyordum, .git gizlendi. Kitabın tamamını okumak için yeterli zamanım yok, deneyebileceğimi düşündüğün bir şey var mı?
MrJD

"İç kısımlar hakkında bir kitap okuyun" genel bir tavsiye olabilir, ancak eldeki belirli sorun ve soruların ele alınmasına yardımcı olmaz.
Burhan Ali

0

Bir süre internette gezindikten sonra sonunda bunu buldum ve işe yaradı.

git fetch origin
git reset --hard origin/master

Bu, herhangi bir değişiklik alır origin(umarım yerel olarak çok fazla iş yapılmaz) ve ardından yerel masterşubeyi uzaktan kumanda ile anlaşmaya zorlar . Dikkatli, --resetaraçlar atmak herhangi Yerel değişiklikler! Ayrıca, çok kırılmamış git reset origin/masterolsaydı, masterdalın bilinen son (iade) durumunu geri yüklerdi.
vonbrand
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.