2011-06-19 28 views
80

tôi đã cố gắng để loại bỏ một tập tin từ repo từ xa của tôi bằng cách chạy:tập tin Purging từ Git repo thất bại, không thể tạo bản sao lưu mới

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

Nhưng Git phàn nàn rằng

Không thể tạo bản sao lưu mới. Một bản sao lưu trước đã tồn tại trong refs/gốc/
Force ghi đè các sao lưu với -f
rm: không thể loại bỏ /.git-rewrite/backup-refs: Permission denied
rm: không thể loại bỏ thư mục /.git-rewrite: Danh bạ không trống

Đây là sau khi tôi đã xóa thư mục .git-rewrite trên Windows.

Tôi làm cách nào để xóa tệp đó? Đó là một tập tin 29Mb ngồi trên repo của tôi, vì vậy tôi khá cần phải loại bỏ các tập tin.

Tôi đã cố gắng xóa cam kết trong git rebase -i, nhưng rõ ràng vì cam kết đã chạm vào nhiều tệp khác nhau, Git phàn nàn về xung đột và tôi bị hủy bỏ để an toàn.

+1

Đối với công cụ tìm kiếm: điều này cũng có thể áp dụng khi thông báo lỗi của bạn là ' .git-rewrite đã tồn tại, vui lòng xóa nó'. –

Trả lời

158

Bạn đã thực hiện thao tác với chi nhánh bộ lọc. Sau khi lọc-chi nhánh, Git giữ refs để các cam kết cũ xung quanh, trong trường hợp một cái gì đó đi sai.

Bạn có thể tìm thấy những người trong số .git/refs/original/…. Xóa thư mục đó và tất cả các tệp bên trong hoặc sử dụng cờ -f để buộc Git xóa các tham chiếu cũ.

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

Cuối cùng, nó đã hoạt động, cảm ơn! Tôi đã thử cờ -f, nhưng vấn đề là tôi đã đặt nó ở phần cuối của lệnh ví dụ. HEAD -f. Thấy lệnh của bạn khiến tôi thử đặt cờ ngay từ đầu, và nó đã hoạt động! = D – Cardin

+11

cờ tùy chọn ('-f') đi trước khi tham chiếu (' HEAD'). refs go last – knittl

+0

Tôi vẫn nhận được lỗi tương tự sau khi thêm -f VÀ xóa thư mục. Bất kỳ ý tưởng? – Yaron

1

Thêm lực vào lệnh chi nhánh bộ lọc.

+0

vâng, thêm cờ "-f" – Patric

4

Tôi gặp vấn đề tương tự và câu trả lời ở trên không khắc phục được sự cố. Không còn thư mục .git/refs/original/directory. Giải pháp cho tôi là xóa tệp .git/packed-refs.

+0

Cùng một vấn đề. Tuy nhiên, không có tệp '.git/packed-refs' và không có thư mục' original' trong '.git/refs'. Bất kỳ ai? – XedinUnknown

+0

Đã giải quyết [tại đây] (http://stackoverflow.com/questions/18746580/removing-history-from-git-git-command-fails) bằng cách thêm cờ '-r' vào lệnh. – XedinUnknown

+0

Cùng một vấn đề ở đây. Việc xóa các gói đóng gói đã giải quyết được vấn đề, nhưng nó cũng hủy hoại phần còn lại của thư mục git của tôi và tôi phải khôi phục từ bản sao lưu. –

Các vấn đề liên quan