Dosya Git deposundan temizlenemedi, yeni yedekleme oluşturulamadı


116

Uzak depomdan bir dosyayı çalıştırarak kaldırmaya çalıştım:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

Ama Git bundan şikayet ediyor

Yeni yedek oluşturulamaz.
-F
rm ile yedeklemenin üzerine yazmayı zorla refs / original / Force içinde önceki bir yedekleme zaten mevcut : /.git-rewrite/backup-refs kaldırılamıyor: İzin reddedildi
rm: dizin kaldırılamıyor /.git-rewrite: Dizin boş değil

Bu, Windows'ta .git-rewrite dizinini silmemden sonraydı.

Bu dosyayı nasıl kaldırabilirim? Depomda oturan 29Mb'lik bir dosya, bu yüzden dosyayı kaldırmam gerekiyor.

Taahhüdü silmeye çalıştım git rebase -i, ama görünüşe göre commit birçok farklı dosyaya dokunduğu için Git çatışmalardan şikayet ediyor ve güvenli olmak için iptal ettim.


1
Arama motorları için: Bu, hata mesajınız olduğunda da geçerli olabilir .git-rewrite already exists, please remove it.
Drew Noakes

Yanıtlar:


219

Zaten bir filtre dallanma işlemi gerçekleştirdiniz. Filtre dalından sonra Git, bir şeyler ters giderse diye etrafındaki eski işlemlere referanslar tutar.

Bunları içinde bulabilirsiniz .git/refs/original/…. Ya bu dizini ve içindeki tüm dosyaları silin ya da -fGit'i eski referansları silmeye zorlamak için bayrağı kullanın.

git filter-branch -f \
--index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD

10
Sonunda işe yaradı, teşekkürler! -F bayrağını denedim ama sorun onu komutun sonuna koymamdı örneğin. KAFA -f. Emrinizi görmek, bayrağı başlangıçta koymamı sağladı ve işe yaradı! = D
Cardin

12
seçenek bayrakları ( -f) refs ( HEAD) 'den önce gider . hakemler son gider
knittl

-F ekledikten VE dizini sildikten sonra hala aynı hatayı alıyorum. Herhangi bir fikir?
Yaron

1
@knittl, bahsetmiyordum git add. .git/refs/original/Klasörü sildikten ve komuttaki -fbayrağı kullandıktan sonra bile orijinal posterle aynı hatayı alıyordum git filter-branch. Benim durumumda çözüm, .git/packed-refsdosyayı silmekti .
Yaron

1
@knittl, nasıl düzelteceğimi buldum ama sorunun ne olduğunu bulamadım. Temel olarak, --ignore-unmatchkomuta ekledim git rmve sorunsuz geçti!
Gabrielius

21

Orijinal yedeklemeyi kaldırmak için bu komutu kullanın:

git update-ref -d refs/original/refs/heads/master

Git depomu filtrelemek için kullandığım temel bilgiler: https://gist.github.com/k06a/25a0214c98bc19fd6817


Yedeği kaldırmak için doğru çözüm budur! Silme .git/refs/original/sorunu çözmez.
Erik Koopmans

Düzeltmeye çalıştığınız dalda 'ana' kelimesini değiştirdiğinizden emin olun .. benim durumumda 'geliştir'
Damian Green

git show-ref | awk '/ refs.original.refs/{print$2}'deponuzun sahip olduğu tüm yedekleri bulmak için.
Dan

4

Aynı sorunu yaşadım ve yukarıdaki cevap onu çözmedi. .Git / refs / original / dizini kalmamıştı. Benim için çözüm, .git / packed-refs dosyasını silmekti.


Aynı sorun. .git/packed-refsAncak dosya yok ve originaliçinde klasör yok .git/refs. Kimse?
XedinUnknown

Burada-r komuta bayrak eklenerek çözüldü .
XedinUnknown

Burada da aynı problem. Paketlenmiş referansları silmek sorunu çözdü, ancak aynı zamanda git dizinimin geri kalanını da mahvetti ve yedekten geri yüklemek zorunda kaldım.
Kevin Yin

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.