2012-10-26 40 views
6

Tôi có một git kho lớn hơn 3 năm qua, tôi muốn xóa lịch sử thay đổi mà đã hơn một năm trước. Điều này có thể không? Có thể sử dụng git rebase nhưng làm thế nào?Git loại bỏ lịch sử cam

+0

Git được thực hiện để lưu các thay đổi của bạn. Tác dụng xóa lịch sử là gì? –

+0

lịch sử của tôi là nó quá lớn, .git dir là lớn hơn 400 MB, trong mỗi bản sao tôi phải tải về tất cả :(lịch sử này – paweb

+0

có thể trùng lặp: [? Làm thế nào để loại bỏ các lịch sử cũ từ một kho git] (http://stackoverflow.com/questions/4515580/how-do-i-remove-the-old-history-from-a-git-repository) –

Trả lời

3

Điều tra ma thuật đen gọi là git replace trong this article from the Pro Git book sử dụng các trường hợp chính xác làm ví dụ. Về cơ bản, nếu bạn có thể tìm thấy một điểm trong lịch sử mà bạn muốn hành động như là gốc mới, bạn có thể thay thế nó bằng một cam kết không có cha mẹ, như thể nó được tạo ra từ không khí mỏng. Bạn thậm chí có thể lưu trữ cây gốc trên một máy duy nhất, giúp bạn dễ dàng khôi phục lịch sử nếu bạn cần lại.

Lưu ý rằng vấn đề với git rebase (và git replace, cho vấn đề đó) là bạn muốn viết lại toàn bộ cây, bao gồm các nhánh, để tất cả đều trỏ đến các cam kết khác nhau. Điều này cũng có kết quả là làm cho nó khó khăn cho những người khác trong nhóm của bạn để hợp nhất trong những thay đổi của họ, bởi vì tất cả các bậc cha mẹ có SHAs khác nhau hơn họ đã có trước đây.

+1

Từ những gì tôi đọc , 'cái' git replace'' thingy sẽ không làm việc xung quanh sự thay đổi-băm-vấn đề. –

+1

@Jonas Bạn nói đúng. Cơ cấu lại câu trả lời của tôi để làm cho điều đó rõ ràng. –

+1

Tuyệt vời! Nó cũng sẽ là một lỗi rất lớn trong git nếu bạn có thể thay thế toàn bộ lịch sử mà không có bất kỳ thay đổi nào trong băm. Sau tất cả, những băm mật mã là một trong những lý do để sử dụng git. –

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