Cách sử dụng branch trong Git

Trong bài này chúng ta sẽ đi vào ví dụ cụ thể cách sử dụng branch trong Git. Các bạn sẽ học được cách tạo branch, chuyển sang branch khác, merge branch (gộp branch), xóa branch sau khi sử dụng xong, xử lý conflict khi merge giữa các branch.

0/ Chuẩn bị repository
– Đầu tiên chúng ta sẽ khởi tạo 1 repository như sau (trong thư mục laptrinhinfo)

– Tiếp theo chúng ta tạo 1 file test.txt với nội dung như bên dưới

– Kế đến hãy commit những lịch sử thay đổi của file txt bên trên

1/ Tạo branch mới

– Chúng ta tạo 1 branch tên là “feature” bằng dòng lệnh sau

– Sau khi tạo xong chúng ta sẽ kiểm tra lại bằng cách hiển thị ra toàn bộ branch đang có trong repository

– Danh sách các branch đang có sẽ hiện ra, hiện tại bạn đang ở branch master nên sẽ có dấu * phía trước tên branch master

2/ Chuyển branch

– Bây giờ chúng ta sẽ chuyển qua branch feature bằng lệnh sau

*** Chúng ta có thể gộp 2 bước tạo branch mới và chuyển ngay sang branch mới bằng cách sau

– Lúc này các bạn thử thêm nội dung vào file test.txt, ví dụ

– Sau đó hãy commit lên, lúc này những commit của bạn sau khi chuyển sang branch feature chỉ được ghi nhận trong lịch sử của branch feature, branch master hoàn toàn không lưu lại những thay đổi này

3/ Merge branch (gộp branch)

– Bây giờ mục tiêu của chúng ta là merge branch feature vào branch master. Để merge branch, chúng ta cần chuyển sang branch cần merge vào, đó là branch master

– Kế đến ta sẽ merge branch feature vào branch master bằng lệnh sau

– Nếu merge thành công không bị lỗi hay conflict, kết quả sẽ hiện lên màn hình như bên trên. Bây giờ bạn hãy kiểm tra nội dung file test.txt ở branch master, những gì bạn đã chỉnh sửa ở branch feature đã được cập nhật.

4/ Xóa branch

– Sau khi tạo branch mới và làm việc trên branch đó, sau khi đã merge branch đã tạo vào 1 branch khác, nếu bạn không cần sử dụng branch đó nữa thì có thể xóa nó bằng lệnh sau (trong ví dụ này tôi sẽ xóa branch feature)

– Bạn có thể kiểm tra xem branch đã được xóa thành công chưa bằng lệnh hiển thị toàn bộ branch: git branch

5/ Làm việc song song trên nhiều branch và xử lý conflict khi merge branch

– Bây giờ chúng ta sẽ giả định tình huống 2 người trong cùng 1 team làm việc trên 2 branch khác nhau. Ví dụ user A làm việc trên branch feature1, user B làm việc trên branch feature2. Lúc này 2 user sẽ sửa cùng chung 1 file trên 2 branch khác nhau và conflict sẽ xảy ra khi merge 2 branch này vào branch master. Đầu tiên chúng ta sẽ tạo 2 branch feature1 và feature2 sau đó sẽ chuyển qua branch feature1 (đóng vai trò là user A)

– User A lúc này sửa nội dung file test.txt như sau

– Ở đây ta đã thấy user A thêm mới vào nội dung ở dòng 3 đoạn text “User A da them vao 1 dong nay” và chỉnh sửa nội dung ở dòng 1 từ “su dung Git branch” sang “[su dung Git branch]” . Bây giờ chúng ta sẽ lưu thay đổi ở branch feature1 bằng lệnh commit

– Tiếp theo chúng ta chuyển qua branch feature2 (đóng vai trò là user B).

– Lúc này user B sẽ thêm 1 đoạn text mới ở dòng 3 và chỉnh sửa dòng 1, thao tác có vẻ tương tự user A nhưng nội dung thêm mới và chỉnh sửa hoàn toàn khác nhau

– Và user B cũng commit để lưu lại thay đổi của mình ở branch feature2

– Vậy là chúng ta đã thấy user A và user B đã làm việc song song trên 2 branch khác nhau và đã lưu lại những gì họ đã làm tại 2 branch trên. Bây giờ tôi sẽ đóng vai trò 1 user khác (user C) quản lý branch master và hoàn toàn không biết những gì user A và user B đã thay đổi trên branch của họ. Nhiệm vụ của tôi là merge 2 branch trên vào branch master để đồng bộ code lại. Đầu tiên tôi sẽ chuyển sang branch master và merge branch feature1 vào

– Mọi thứ có vẻ ổn không có vấn đề gì sau khi merge branch feature1 vào master, file test.txt đã hiển thị đúng những gì user A đã làm. Bây giờ chúng ta hãy merge branch feature2 vào master

– Lần này thì mọi việc có vẻ không ổn như khi merge lần đầu. Đã có lỗi conflict xảy ra. Bây giờ chúng ta sẽ kiểm tra nội dung file test.txt để xem nó đã bị conflict như thế nào

– Lúc này ta thấy từ đoạn <<<<<<< HEAD cho đến ======= là nội dung file test.txt ở branch master sau khi đã merge branch feature1 vào. Còn đoạn ======= cho đến >>>>>>> feature2 là nội dung file test.txt của user B đã sửa ở feature2 do bị conflict với đoạn trên nên không thể merge vào. Bây giờ tôi (user C) sẽ sửa nội dung file test.txt bằng cách hợp nhất kết quả của user A và user B đã làm

(Lưu ý: cách sửa conflict trên chỉ là ví dụ, trong trường hợp thực tế có thể user A và user B sẽ họp chung lại với nhau để thống nhất kết quả theo 1 cách khác. Cách sửa conflict của tôi ở đây là giữ lại toàn bộ những gì user A và user B đã thêm vào và đã sửa)

– Và khi đã sửa xong conflict, đừng quên commit ở branch master

– Vậy là conflict đã được xử lý xong xuôi. Đương nhiên trên thực tế khi làm việc, conflict thường phức tạp hơn vậy nhiều và có thể xảy ra trên rất nhiều file. Và dĩ nhiên sẽ tốn thời gian ngồi so sánh 2 kết quả để để sửa lại file theo cách tối ưu nhất.