Hướng Dẫn Quy Trình Làm Việc Với Git Rebase
Chào các bạn,
Có lẽ đã có rất nhiều bài viết phân tích và hướng dẫn về các phương thức hợp nhất nhánh trong Git workflow, chủ yếu là hai phương thức chính: Merge và Rebase. Trong bài viết này, mình muốn chia sẻ những kinh nghiệm thực tế mà mình đã tích lũy được khi làm việc với phương thức Rebase, với mong muốn giúp các bạn có cái nhìn rõ hơn và cách áp dụng hiệu quả trong công việc hàng ngày.
Tìm hiểu về Rebasing
Rebase là một công cụ mạnh mẽ trong Git, cho phép người dùng viết lại lịch sử commit để giữ cho cây Git trở nên gọn gàng và dễ theo dõi hơn. Việc tái cấu trúc lịch sử này có thể mang lại nhiều lợi ích cũng như những rủi ro nhất định. Do đó, việc nắm rõ quy trình làm việc với Rebase là cực kỳ quan trọng.
1. Dọn dẹp Local
Trong quá trình phát triển một tính năng trên nhánh riêng, có thể bạn sẽ tạo ra nhiều commit. Để giữ cho lịch sử commit sạch sẽ và dễ dàng theo dõi, bạn nên thực hiện squash commit. Đây là cách gộp nhiều commit thành một để giảm độ phức tạp.
Cách thực hiện:
Giả sử bạn có 3 commit liên tiếp và muốn gộp thành một,
bash
git switch feature
git rebase -i HEAD~3
Khi đó, một cửa sổ editor sẽ hiển thị lịch sử commit. Bạn có thể sử dụng các lệnh sau:
p
: pick - giữ lại commitr
: reword - giữ lại commit và sửa messages
: squash - bỏ qua commit nhưng gộp log vào commit trướcf
: fixup - bỏ qua commit và xóa log completely
Chọn commit đầu tiên và thay thế các pick
của những commit sau bằng squash
. Sau khi chỉnh sửa, lưu lại và thoát.
2. Rebasing so với nhánh chính
Sau khi đã gộp các commit của mình, bước tiếp theo là tiến hành rebase với commit trên nhánh chính (main).
Cách thực hiện:
- Chuyển sang nhánh chính và cập nhật:
bash
git switch main
git pull origin main
2. Quay lại nhánh tính năng:
```bash
git switch feature
git rebase -i main
3. Push Force lên nhánh tính năng
Khi đã xử lý xong các xung đột và squash các commit cần thiết, bạn có thể tiến hành push lên remote. Do lịch sử commit đã thay đổi, bạn cần sử dụng lệnh --force
.
Lệnh thực hiện:
bash
git push origin feature --force
Lưu ý: Sau khi rebase, lịch sử commit trên nhánh tính năng sẽ khác với nhánh trên remote. Do đó, bạn cần push force
để ghi đè lịch sử cũ.
4. Tạo Merge/Pull Request
Trong quá trình tạo PR/MR, một lưu ý quan trọng là các yêu cầu phê duyệt nên diễn ra theo thứ tự. Hãy chắc chắn rằng mọi PR/MR đều được rebase ngay sau khi một PR/MR trước đó đã được hợp nhất vào nhánh chính.
Tổng Kết
Cả hai phương pháp Merge và Rebase đều có mục tiêu cuối cùng là hợp nhất các thay đổi từ một nhánh vào nhánh chính. Tuy nhiên, lựa chọn giữa hai phương pháp này tùy thuộc vào mục tiêu của dự án bạn đang thực hiện.
- Rebase thường được ưa chuộng nếu bạn muốn giữ cho cây Git gọn gàng, sạch sẽ và dễ dàng theo dõi.
- Merge là lựa chọn hiệu quả nếu bạn ưu tiên bảo toàn lịch sử đầy đủ và không ngại đối mặt với các commit phức tạp.
Hy vọng bài viết này sẽ giúp bạn có cái nhìn sâu sắc hơn về quy trình làm việc với Git Rebase. Nếu bạn muốn tìm hiểu thêm, hãy tham khảo các tài liệu và bài viết bên dưới.
Tài liệu tham khảo
- Sự khác biệt giữa Git Merge và Rebase
- Hướng dẫn về Git từ Atlassian
- Sách hướng dẫn về Git Rebase
- So sánh Rebase và Merge từ PhoenixNAP
- Tài khoản Twitter của Alexxubyte
source: viblo