Unlock Git Workflow: Embrace Linear History for Better Efficiency

2 min read

Vấn đề

  • Tại sao thỉnh thoảng dùng git merge, git rabase?
  • Git merge và git rebase khác gì nhau, nên dùng cái nào?
  • Lịch sử git có giá trị như thế nào?

Nếu bạn là 1 git command line master thì mọi thứ đều có thể được giải quyết dưới local bằng dòng lệnh. Nhưng khi làm việc trong một nhóm đông thành viên, làm thế nào để xử lý các vấn đề conflict code, release ra sao, thêm feature mới như thế nào, hotfix ra làm sao một cách trơn tru và hiệu quả, giảm thiểu tối đa các bước thủ công, tiến dần đến một git workflow tự động hoàn toàn (devops).

Giải pháp

Các git workflow như Gitflow sinh ra để giải quyết các vấn đề này một cách hiệu quả và mạnh mẽ nhất.

Git Workflow được giới thiệu sau đây luôn giữ một tư duy cực kỳ nhất quán về git history luôn luôn là linear history (có thể hiểu là history trên một đường thẳng). Nhìn trong hình đủ thấy linear history dễ hiểu hơn rất nhiều so với non-linear history, nhìn vào graph là có thể thấy được thứ tự của các commit và sự khác nhau giữa các version được release.

Git merge vs Git rebase

Git merge và Git rebase là hai cách tiếp cận khác nhau để kết hợp các thay đổi từ các nhánh khác nhau vào một nhánh chính. Dưới đây là một so sánh giữa hai phương pháp này:

  1. Git Merge:
    • Tạo ra một commit merge mới trên nhánh đích
    • Lịch sử commit của mỗi nhánh được giữ nguyên
    • Có thể dẫn đến lịch sử commit phức tạp và dài dòng.
    • Thích hợp cho việc kết hợp các tính năng lớn hoặc nhóm thay đổi lớn từ các nhánh khác nhau.
  2. Git Rebase:
    • Di chuyển các commit của bạn trên một nhánh đích mới
    • Lịch sử commit trở nên tuyến tính hơn, với các commit được thêm vào nhánh mục tiêu theo thứ tự.
    • Có thể tạo ra một lịch sử commit mạch lạc hơn và dễ đọc hơn.
    • Cần cẩn thận khi sử dụng rebase với các nhánh đã được chia sẻ công khai với nhóm

Nguyên tắc tiên quyết

  • Để update code mới nhất, không merge trên local, hãy dùng rebase
  • Merge tự động bằng merge (pull) request (cần cấu hình để khi merge sẽ sinh ra một empty commit nhằm đánh dấu vị trí merge)
Git workflow linear history
Git workflow Linear history

Tham khảo

Avatar photo

Leave a Reply

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