Xóa toàn bộ lịch sử commit của Github

1. Xóa toàn bộ lịch sử commit (Bắt đầu lại từ đầu)

Nếu bạn muốn giữ lại toàn bộ code hiện tại nhưng muốn xóa sạch sẽ mọi dấu vết commit trong quá khứ, hãy làm theo các bước sau trong Terminal (hoặc Git Bash):

  1. Tạo một nhánh mồ côi (orphan branch) mới, nhánh này sẽ không chứa bất kỳ lịch sử nào:
git checkout --orphan latest_branch
  1. Thêm tất cả các file hiện tại vào nhánh mới này:
git add -A
  1. Tạo commit đầu tiên cho nhánh mới:
git commit -am "Initial commit"
  1. Xóa nhánh chính cũ (thường là main hoặc master):
git branch -D main
  1. Đổi tên nhánh mới tạo thành nhánh chính:
git branch -m main
  1. Cập nhật (Force push) thay đổi lên GitHub:
git push -f origin main

2. Xóa một vài commit gần đây nhất

Nếu bạn lỡ commit sai và chỉ muốn xóa 1 hoặc vài commit cuối cùng, bạn có thể đưa trạng thái kho lưu trữ quay ngược thời gian.

  1. Lùi lại N commit (ví dụ dưới đây là xóa 1 commit gần nhất):
git reset --hard HEAD~1

(Thay số 1 bằng số lượng commit bạn muốn xóa. Lệnh --hard sẽ xóa sạch các thay đổi trong file của những commit đó. Nếu muốn giữ lại code để sửa và commit lại, hãy dùng --soft thay vì --hard).

  1. Đẩy đè thay đổi lên GitHub:
git push origin HEAD --force

3. Xóa dữ liệu nhạy cảm (Mật khẩu, API keys)

Nếu mục đích của bạn là xóa một file chứa thông tin nhạy cảm đã lỡ bị push lên từ lâu, việc dùng git reset là không an toàn vì file đó vẫn tồn tại trong lịch sử Git.

Trong trường hợp này, GitHub khuyến cáo sử dụng các công cụ chuyên dụng:

  • git-filter-repo: Công cụ chính thức được khuyên dùng để lọc lại toàn bộ lịch sử.
  • BFG Repo-Cleaner: Một giải pháp đơn giản và nhanh chóng hơn để xóa các file lớn hoặc file chứa mật khẩu khỏi lịch sử.

Lưu ý quan trọng trước khi thực hiện:

Việc sử dụng lệnh có cờ --force hoặc -f sẽ ghi đè dữ liệu trên server GitHub một cách vĩnh viễn (rất khó để khôi phục nếu làm sai).

Nếu bạn làm việc trong một nhóm, hãy thông báo cho đồng đội trước khi thực hiện việc xóa lịch sử. Sau khi bạn force push, đồng đội của bạn sẽ cần phải clone lại dự án hoặc thực hiện các lệnh rebase phức tạp để đồng bộ lại code của họ. Tốt nhất là sao lưu (backup) một bản copy của thư mục dự án ra nơi khác trước khi bắt đầu.
Chia sẻ:
Chout

Chout

0 0 đánh giá
Đánh giá bài viết
0 Góp ý
Mới nhất
Cũ nhất Được bỏ phiếu nhiều nhất