Để đặt lại kho lưu trữ Git và xóa toàn bộ lịch sử của nó (chẳng hạn như để loại bỏ thông tin nhạy cảm khỏi các commit), hãy làm theo các bước sau một cách cẩn thận. Lưu ý rằng quá trình này có tính phá hủy và sẽ ghi đè lên kho lưu trữ, vì vậy hãy đảm bảo đây là điều bạn muốn.
1. Sao lưu kho lưu trữ hiện tại
Trước khi thực hiện bất kỳ thay đổi không thể hoàn tác nào, hãy tạo bản sao lưu kho lưu trữ của bạn trong trường hợp bạn cần tham khảo dữ liệu cũ sau này.
2. Tạo một nhánh mới không có lịch sử
# Di chuyển đến kho lưu trữ của bạn
cd /path/to/your/repo
# Kiểm tra một nhánh mồ côi mới
git checkout --orphan clean-history
Một nhánh mồ côi bắt đầu mà không có bất kỳ lịch sử nào.
3. Chuẩn bị và cam kết các tệp hiện tại
# Xóa tất cả các tệp được theo dõi khỏi chỉ mục
git rm -rf --cached .
# Thêm tất cả các tệp hiện tại vào chỉ mục
git add .
# Cam kết trạng thái hiện tại
git commit -m "Cam kết sạch ban đầu"
4. Xóa tất cả các nhánh cũ
# Xóa tất cả các nhánh ngoại trừ nhánh mới
git branch -D main
(Thay thế main
bằng tên nhánh mặc định của bạn, nếu khác. Ví dụ: master
trong một số trường hợp)
5. Thay thế nhánh mặc định
Đổi tên nhánh mới thành tên nhánh mặc định của bạn:
git branch -m main
6. Thực hiện đẩy mạnh để ghi đè lên kho lưu trữ từ xa (Tùy chọn nếu kho lưu trữ chưa được đẩy lên từ xa)
Bước này sẽ ghi đè lên kho lưu trữ trên máy chủ từ xa và xóa lịch sử:
git push --force origin main
7. Xóa thông tin nhạy cảm khỏi máy chủ từ xa
Để đảm bảo thông tin nhạy cảm không còn khả năng truy cập:
- Xác minh rằng giao diện web của kho lưu trữ từ xa (như GitHub hoặc GitLab) không còn hiển thị lịch sử commit.
- Liên hệ với nhà cung cấp dịch vụ lưu trữ kho lưu trữ để xóa bất kỳ ảnh chụp nhanh được lưu trong bộ nhớ cache hoặc được lưu trữ, nếu có.
8. Sao chép lại kho lưu trữ (Tùy chọn)
Để đảm bảo một thư mục làm việc sạch sẽ, hãy xóa bản sao cục bộ của bạn và sao chép lại kho lưu trữ:
rm -rf /path/to/local/repo
git clone <repo-url>
Cảnh báo
- Kho lưu trữ được chia sẻ: Nếu kho lưu trữ này được chia sẻ với những người cộng tác, hãy phối hợp với họ trước khi đẩy mạnh các thay đổi.
- Dữ liệu nhạy cảm: Mặc dù phương pháp này xóa lịch sử commit, nhưng dữ liệu vẫn có thể tồn tại trong các bản sao lưu hoặc bộ nhớ cache (ví dụ: hệ thống của GitHub). Bạn có thể cần liên hệ với nhà cung cấp dịch vụ lưu trữ của mình để đảm bảo xóa hoàn toàn.
Cách khác: Sử dụng git-filter-repo
Nếu bạn muốn xóa dữ liệu nhạy cảm cụ thể trong khi vẫn giữ lại một số lịch sử, hãy sử dụng một công cụ như git-filter-repo. Điều này cho phép bạn ghi đè lịch sử một cách có chọn lọc, điều này có thể là một lựa chọn tốt hơn nếu bạn không muốn mất toàn bộ lịch sử commit.