Bunu yeni yaşadım - Git deposuna yazarken makinem çöktü ve bozuldu. Aşağıdaki gibi sabitledim.
Uzak repoya kaçmadığım için ne kadar taahhütte bulunduğuma baktım, böylece:
gitk &
Bu aracı kullanmazsanız çok kullanışlıdır - bildiğim kadarıyla tüm işletim sistemlerinde kullanılabilir. Bu, uzaktan kumandamın iki taahhüt eksik olduğunu gösterdi. Bu nedenle en son uzaktan taahhüdü gösteren etikete tıkladım (genellikle bu/remotes/origin/master
hash almak için ) (karma 40 karakter uzunluğunda, ancak kısalık için burada 10 kullanıyorum - bu genellikle yine de işe yarıyor).
İşte burada:
14c0fcc9b3
Daha sonra aşağıdaki taahhüdü (yani, uzaktan kumandanın sahip olmadığı ilk) tıklayın ve hash'ı oraya getirin:
04d44c3298
Daha sonra bu taahhüt için bir yama yapmak için her ikisini de kullanın:
git diff 14c0fcc9b3 04d44c3298 > 1.patch
Daha sonra diğer eksik işlemlerle benzer şekilde yaptım, yani daha önce işlemin karmasını ve işlemin kendisinin karmasını kullandım:
git diff 04d44c3298 fc1d4b0df7 > 2.patch
Sonra yeni bir dizine taşındım, uzaktan kumandadan repo kopyaladım:
git clone git@github.com:username/repo.git
Daha sonra yama dosyalarını yeni klasöre taşıdım ve uyguladım ve kesin taahhüt mesajlarıyla taahhüt ettim (bunlar yapıştırılabilir git log
veya gitk
pencereden):
patch -p1 < 1.patch
git commit
patch -p1 < 2.patch
git commit
Bu benim için işleri geri getirdi (ve muhtemelen çok sayıda taahhütte yapmanın daha hızlı bir yolu olduğunu unutmayın). Ancak ben bozuk repo ağacın tamir edilip edilemeyeceğini görmek istedim ve cevap olabilir. Onarılmış bir repo yukarıdaki gibi mevcutsa, bu komutu bozuk klasörde çalıştırın:
git fsck
Bunun gibi bir şey alacaksınız:
error: object file .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d is empty
error: unable to find ca539ed815fefdbbbfae6e8d0c0b3dbbe093390d
error: sha1 mismatch ca539ed815fefdbbbfae6e8d0c0b3dbbe093390d
Onarım yapmak için, ben kırık klasörde bunu yaparım:
rm .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d
cp ../good-repo/.git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d .git/objects/ca/539ed815fefdbbbfae6e8d0c0b3dbbe093390d
yani bozuk dosyayı kaldırın ve iyi bir dosyayla değiştirin. Bunu birkaç kez yapmak zorunda kalabilirsiniz. Sonunda koşabileceğiniz bir nokta olacakfsck
hatasız . Muhtemelen raporda "sarkan taahhüt" ve "sarkan damla" satırlarına sahip olacaksınız. Bunlar, bu klasördeki temel ve değişikliklerin bir sonucudur ve sorun değildir. Çöp toplayıcı onları zamanında çıkarır.
Böylece (en azından benim durumumda) bozuk bir ağaç, baskısız taahhütlerin kaybolduğu anlamına gelmez.