Xóa history trên Git (vẫn giữ lại code mới nhất) như thế nào?

Mình đã từng chia sẻ cách remove những file đã được commit vào git, còn lần này mình sẽ chia sẻ cách xóa history trên Git như thế nào. Ý mình là xóa toàn bộ history nhưng vẫn giữ lại code mới nhất. Nhìn vào sẽ giống như một repo hoàn toàn mới với một commit khởi tạo.

Mỗi lần bạn commit code là Git sẽ lưu lại lịch sử thay đổi. Điều này giúp bạn dễ dàng theo dõi, rà soát hay revert code về trạng thái trước đó. Tuy nhiên khi hoạt động lâu ngày thì history cũng chiếm nhiều dung lượng và cái history tree trở nên loằng ngoằng như giáng long thập bát chưởng. Và có thể đến lúc bạn sẽ muốn xóa history toàn bộ history.

Git hỗ trợ rất nhiều thao tác để làm việc với repo đặc biệt là khi bạn sử dụng command line. Trên giao diện UI thì tùy thuộc vào từng app mà các chức năng có hay không. Trong bài viết này mình sẽ sử dụng command để thực hiện việc xóa history trên nhánh master. Bạn có thể thực hiện trên các nhánh còn lại với thao tác tương tự.

Để xóa history trên nhánh master ta sẽ thực hiện như sau:

  • tạo một nhánh tạm thời
  • checkout tất cả các file
  • commit các file vừa checkout lên nhánh tạm thời đó
  • xóa nhánh master ở local
  • đổi tên nhánh tạm thời thành master (nhánh này vẫn ở local)
  • force push nhánh master lên Git server

Vì nhánh master mới này cái history của nó chỉ có 1 commit duy nhất nên sau khi force push nó sẽ thay thế toàn bộ history của nhánh master trên Git server.

Dưới đây là loạt câu lệnh để các bạn thực hiện.

git checkout --orphan temp-master # tạo nhánh master tạm thời
git add -A  # Checkout tất cả các file
git commit -m 'Initial Commit' # Commit các file vừa checkout
git branch -D master # Xóa nhánh master ở local
git branch -m master # Đổi tên nhánh hiện tại thành master ở local
git push -f origin master # Force push nhánh master lên server

Trong bài viết này mình đã đề cập đến một kĩ thuật ít khi phải sử dụng đến. Tuy nhiên thỉnh thoảng khi history quá nhiều và gây nhiễu loạn thì đó chính là lúc bạn nghĩ đến việc xóa hitory trên Git.

Leave a Reply

Your email address will not be published. Required fields are marked *