Son zamanlarda, metin editörlerimin kullandığı proje dosyalarının (başka bir önemsiz ile birlikte) proje için git deposunu eklediğini fark ettim. Aslında projenin bir parçası olmadıklarından onları kaldırmak istiyorum, ancak git rm
eski sürümleri depodan kaldırmıyor ve umut verici görünen başka bir şey bulamadım.Bir dosyayı tamamen bir depodan nasıl kaldırabilirim?
cevap
İstediğiniz araç git filter-branch
'dur. Onun kullanımı temelde here tarif, ancak:
$ git filter-branch --tree-filter 'rm -f my_file' HEAD
her taahhüt gelen "my_file" kaldıracaktır.
Bunun her bir işlemi yeniden yazdığına dikkat edin, bu nedenle uzak bir depoya bastığınızda, (a) güncelleştirmeyi zorlamanız gerekir ve (b) sizden çektiği herkesin artık yinelenen taahhütleri olacaktır (yeniden yazdığınızdan git rebase
man page'da açıklandığı gibi).
'--prune-empty 'eklemenizi öneririm, böylece sonuç olarak oluşturulan herhangi bir boş taahhüt kaldırılır çok. – fnkr
Bu, farklı dizinlerde aynı ada sahip birçok dosya ile nasıl bir depoda çalışır? Aynı ada sahip tüm dosyaları siliyor mu? – CodeMonkey
@CodeMonkey: Bu durumda, daha uzun ve benzersiz bir yol kullanırsınız. – mipadi
git filter-branch
bunun için uygundur, ancak repo geçmişinizin değişeceğinden ve işlemin devam etmesinden sonra işlemenin karmalarının farklı olacağından emin olun. Ayrıca alan boşaltmak istiyorsanız
, sana git forget-blob
kullanmanızı öneririz yalnız git filter-branch
hala uzaktan kumanda, reflog, etiketler ve böyle tarafından başvurulan edilebilir gibi git, dosyanızı unutmak yapmaz çünkü.
git forget-blob main.c.swp
Kesinlikle önceki sorulara kapsadığı fazla bilgi here
kısmi yinelenen alabilirsiniz: http://stackoverflow.com/questions/307828/git-remove-file-accidentally-added-to - deposu http://stackoverflow.com/questions/1216733/remove-a-directory-permanently-from-git – Cascabel