Phân nhánh (Branching) là một trong những tính năng mạnh mẽ nhất của Git, giúp bạn dễ dàng thử nghiệm và phát triển tính năng mới mà không làm ảnh hưởng đến mã nguồn chính. Trong bài học này, chúng ta sẽ tìm hiểu bản chất của nhánh và lý do tại sao nó lại quan trọng đến vậy.
Để thực sự hiểu về việc phân nhánh (branching), trước hết chúng ta cần nhìn lại bản chất của commit.
Ở bài trước, chúng ta đã biết commit giống như một "chiếc hộp" gói gọn thông tin tại một thời điểm: file nào thay đổi, thay đổi khi nào, do ai, và một mã hash để phân biệt nó với các commit khác.
Khi nói đến nhánh (branch), thông tin quan trọng nhất mà một commit nắm giữ chính là một con trỏ (pointer) trỏ ngược về "người cha" (parent) của nó. Hãy hình dung thế này:
Mỗi khi bạn tạo một commit mới, nó sẽ tự động trỏ về commit nằm ngay trước nó.
Các kết nối này tạo thành một chuỗi tuyến tính, commit sau nối tiếp commit trước.
Trong Git, chuỗi này được gọi là branch.
Ban đầu, dự án của bạn chỉ có một chuỗi duy nhất. Chuỗi mặc định này thường được gọi là main branch.

Tuy nhiên, Git cho phép một parent commit có thể có nhiều child commit (nhiều commit con cùng trỏ về một cha). Chính cơ chế này cho phép dòng lịch sử tách ra (diverge) và hình thành nhiều nhánh khác nhau.

Việc chia nhánh mang lại 3 lợi ích cốt lõi cho quy trình làm việc:
Sự riêng biệt: Đây là lợi ích lớn nhất, branch tạo ra các không gian phát triển riêng biệt. Bạn có thể thoải mái đập đi xây lại code ở branch này mà không hề ảnh hưởng đến branch khác.
Thử nghiệm: Thông thường, main branch là nơi chứa mã nguồn ổn định nhất. Bằng cách tạo một branch riêng tách biệt khỏi main, bạn có ngay một môi trường "Sandbox" để phát triển tính năng mới.
Hợp tác (Collaboration): Khi làm việc nhóm, branch cho phép mỗi lập trình viên làm việc trên một tính năng riêng của họ một cách độc lập. Khi làm xong, các phần việc này sẽ được gộp (merge) lại sau.
Sau khi các nhánh phát triển độc lập, đến một lúc nào đó chúng cần phải hợp lại với nhau. Quy trình này gọi là merging. Git thực hiện điều này bằng cách tạo ra một Merge Commit.
Đây là một loại commit đặc biệt vì nó có tới hai cha.
Merge commit sẽ gom tất cả các thay đổi từ nhánh này và áp dụng chúng vào nhánh kia.

Branch bản chất là một chuỗi các commit. Nhận thấy được lợi ích của tính năng branch, chúng ta hãy tìm hiểu và vận dụng branch hiệu quả trong các bài tiếp theo.
Tiếp theo: Tạo và chuyển nhánh