Cách chỉnh sửa lịch sử commit git cục bộ với git rebase và Vscode
Giới thiệu
Trong quá trình phát triển phần mềm, việc quản lý lịch sử commit là rất quan trọng. Đôi khi, bạn cần chỉnh sửa hoặc xóa các tệp lớn trong lịch sử commit của mình để giữ cho kho lưu trữ của bạn gọn gàng. Bài viết này sẽ hướng dẫn bạn cách sử dụng git rebase để chỉnh sửa lịch sử commit cục bộ, đặc biệt là khi bạn đang sử dụng Visual Studio Code (Vscode) làm IDE.
Tình huống
Giả sử bạn có một tệp lớn trong lịch sử commit của mình như sau:
- Tệp
src\build_llm_learn\p7_digitalsreeni_210_unet_segmentation_models\model_examine\model_exec.ipynbvới kích thước 160MB. - Một tệp khác là
examine_main.ipynb.
Bạn muốn đi đến từng commit, xóa tệp lớn này hoặc chỉnh sửa nó để giảm kích thước, cho từng commit trong lịch sử git.
Quy trình thực hiện
1. Tạo nhánh sao lưu
Trước khi bắt đầu, bạn nên tạo một nhánh sao lưu để tránh mất dữ liệu:
bash
git branch backup-before-cleanup
2. Sử dụng git rebase
- Trong bảng điều khiển git của Vscode, lấy hash của commit đầu tiên.
- Mở terminal git bash.
- Chạy lệnh sau để bắt đầu rebase:
bash
git rebase -i <hash_commit>
3. Đánh dấu các commit để chỉnh sửa
Một trình soạn thảo sẽ mở ra với danh sách các commit gần đây của bạn. Thay đổi từ pick thành edit cho những commit mà bạn muốn chỉnh sửa:
bash
edit <hash_commit_1> Commit đầu tiên với tệp lớn
edit <hash_commit_2> Commit thứ hai, có thêm thay đổi
Lưu và đóng trình soạn thảo.
4. Bắt đầu chỉnh sửa trong rebase
Git sẽ quay lại commit đầu tiên trong danh sách. Tại đây, bạn có thể xóa tệp lớn:
bash
git rm --cached path/to/your/large_file.ext
Sau đó, bạn cần commit thay đổi:
bash
git commit --amend --no-edit
Tiếp tục rebase đến commit tiếp theo:
bash
git rebase --continue
5. Chỉnh sửa tệp bằng Vscode
Bạn có thể mở tệp trong Vscode, chỉnh sửa nó, và lưu lại. Sau đó, trong bảng điều khiển git của Vscode:
- Stage thay đổi và commit giống như bạn thường làm.
- Nhấn continue để tiếp tục rebase.
6. Xử lý vấn đề xung đột
Trong quá trình rebase, bạn có thể gặp phải xung đột. Khi đó, git sẽ thông báo:
bash
CONFLICT (content): Merge conflict in path/to/your/file
Bạn có thể mở bảng điều khiển git để xử lý xung đột. Nếu tệp quá lớn, bạn có thể chọn cách chấp nhận phiên bản cũ:
bash
git checkout <commit_hash> -- path/to/your/file
Sau đó, chỉnh sửa tệp theo nhu cầu và tiếp tục rebase.
7. Thực hành tốt nhất
- Tạo nhánh sao lưu trước khi thực hiện bất kỳ thay đổi nào để tránh mất dữ liệu.
- Kiểm tra xung đột một cách cẩn thận trước khi tiếp tục rebase.
8. Những cạm bẫy thường gặp
- Quên lưu thay đổi trước khi đóng trình soạn thảo.
- Không kiểm tra kỹ lưỡng các xung đột có thể gây ra lỗi trong mã nguồn.
9. Mẹo về hiệu suất
- Sử dụng lệnh
git statusthường xuyên để theo dõi tình trạng của nhánh và các thay đổi. - Sử dụng Vscode để dễ dàng xem và chỉnh sửa tệp.
FAQ
Q: Có cần phải tạo nhánh sao lưu không?
A: Có, việc tạo nhánh sao lưu giúp bảo vệ bạn khỏi những sai sót không mong muốn.
Q: Làm thế nào để xử lý xung đột khi rebase?
A: Bạn có thể mở tệp có xung đột, chỉnh sửa và sau đó tiếp tục rebase.
Kết luận
Việc chỉnh sửa lịch sử commit trong git là một kỹ năng quan trọng mà mọi lập trình viên nên biết. Sử dụng git rebase cùng với Vscode giúp bạn dễ dàng quản lý và tổ chức mã nguồn của mình. Hãy thử ngay hôm nay và nâng cao kỹ năng git của bạn! Nếu bạn có câu hỏi hoặc cần thêm thông tin, hãy để lại ý kiến trong phần bình luận.