Vấn đề là git rm
cam kết có mặt trong một số ngành nhưng không phải tất cả, có nghĩa là khi bạn chuyển từ một chi nhánh vẫn chứa các tập tin vào một nơi bạn git rm
'ed git sẽ đúng loại bỏ các tập tin. Những gì bạn thực sự muốn làm là loại bỏ các tập tin từ lịch sử của git như thể họ chưa bao giờ ở đó, theo sau this question. Tuy nhiên, bạn nên lưu ý rằng điều này có nghĩa là viết lại lịch sử kho lưu trữ, vì vậy một điều bạn sẽ phải thực hiện với git push --force
sau đó, và một điều khác, bạn sẽ làm khó chịu những người khác cũng làm việc với repo này.
chỉnh sửa có nên viết lại lịch sử không khả thi, hãy chắc chắn bạn cam kết hành động git rm --cached
trên mỗi chi nhánh hiện có. Tuy nhiên, bạn sẽ vẫn gặp phải việc xóa lại khó chịu nếu bạn thanh toán các bản sửa đổi trước khi xóa.
Tóm tắt:
- phạm
.gitignore
+ git rm --cached
cho mỗi chi nhánh nếu lịch sử không thể được viết lại, nhưng hãy nhớ rằng kiểm tra ra bất kỳ phiên bản trước đó (ví dụ như thông qua một thẻ) sẽ a) mang lại một lỗi về các tập tin chưa được giải quyết git muốn thanh toán và b) gây xóa một lần nữa các tệp này khi chuyển trở lại HEAD
- ghi lại lịch sử nếu bạn có khả năng kiểm tra các bản xem trước trước đó (hoặc một số tệp vô tình chứa dữ liệu nhạy cảm) để tránh điều này , nhưng lưu ý rằng điều này sẽ làm hỏng mọi người Bản sao của se
Thực tế, có một khả năng thứ ba: Đối với mỗi nhánh, tạo một nhánh mới mà bạn viết lại lịch sử, trong khi phiên bản gốc thêm một cam kết xóa tất cả các tệp (ngoại trừ các tệp bị bỏ qua!) thêm một tệp có khả năng hiển thị cao giải thích sự lộn xộn và yêu cầu người dùng chuyển sang nhánh đã viết lại từ bây giờ và xóa bản sao cục bộ của họ về người chưa được chia sẻ.
Lý do cho điều này là bạn không muốn xóa phiên bản của người dùng khác của những tập tin này lẽ ra không nên được phiên bản ngay từ đầu, và vì người ta không mong đợi bao giờ chuyển quay lại phiên bản cũ này sẽ không bao giờ cho biết lỗi "tệp đã tồn tại"
Nguồn
2013-08-27 12:31:44
Bạn đã xóa các tệp đó. Và bạn đang phàn nàn cho họ bị xóa? Tôi không theo dõi –
Tôi muốn git bỏ qua chúng, không xóa chúng mỗi khi tôi thay đổi nhánh. – aitkiar
là .gitignore cam kết trên mọi chi nhánh? –