Git - Lệnh merge branch - Xử lý conflict

Merge branch tức là bạn gộp hai branch lại với nhau, thao tác này thường dùng để merge branch khác vào branch master trước khi push lên remote repository, hoặc merge hai branch thành một để giải quyết chung một task.

1. Git merge branch

Để merge một branch bất kì vào branch hiện tại thì bạn sử dụng cú pháp sau:

$ git merge <branch_name>

Giả sử bạn đang ở branch master, bây giờ bạn muốn merge branch task1 vào branch master thì làm như sau.

$ git merge task1

Giả sử bạn đang ở branch task1, bạn muốn merge branch task2 vào branch master thì làm như sau.

$ git checkout master
$ git merge task2

2. Thực hành merge branch

Bạn hãy tạo một file tên là task1.txt tại branch task1 với nội dung như sau:

Welcome to freetuts.net, this is task1

Tiêp theo bạn quay lại branch master bằng lệnh checkout.

$ git checkout master

Lúc này bạn thấy file task1.txt biên mất, bạn hãy chạy lệnh merge như sau.

$ git merge task1

Lập tức bạn sẽ thấy fie task1.txt đã xuất hiện, lý do là tất cả dữ liệu thay đổi ở branch task1 đã được trộn chung vào branch master.

3. Xử lý xung đột (conflict) khi merge

Giả sử bạn làm hai task trên cả hai branch task 1 và task2 và cả hai đều cùng sửa một file, lúc này khi merge task1 vào task2 sẽ bị xung đột (conflict), vì vậy bạn sẽ phải thực hiện sửa xung đột đó thì thao tác merge mới hoàn thành 100%.

Bước 1: Tại branch master bạn hãy tạo một file demo.txt, sau đó tạo thêm 2 branch branch1branch2.

Tạo 2 branch
$ git branch branch1
$ git branch branch2

Bước 2: Chuyển sang làm việc tại branch1, sửa nội dung file demo.txt thành "Xin chào, đây là demo branch1" và thực hiện commit.

$ git checkout branch1
$ git add .
$ git commit -m "Commit file demo branch1"

Bước 3: Chuyển sang làm việc tại branch2, sửa nội dung file demo.txt thành "Xin chào, đây là demo branch2" và thực hiện commit.

$ git checkout branch2
$ git add .
$ git commit -m "Commit file demo branch2"

Như vậy cả 2 branch trên ta đều sửa chung một file demo. Bây giờ ta sẽ merge branch1 vào branch2 nhé.

$ git merge branch1
Auto-merging demo.txt
CONFLICT (content): Merge conflict in demo.txt
Automatic merge failed; fix conflicts and then commit the result.

Như vậy nó đã báo là bị xung đột file demo.txt, tức là conflict file demo.txt

Bây giờ ban mở file demo.txt lên thì sẽ thấy nội dung của nó như sau:

Nội dung file demo.txt
<<<<<<< HEAD
Xin chào, đây là demo branch2
=======
Xin chào, đây là demo branch1
>>>>>>> branch1

Đoạn bị xung đột được bắt đầu bằng <<<<<<< HEAD và kết thúc tại >>>>>>> branch1, được ngăn cách bởi đường =======. Trong đó đoạn trên là của branch hiện tại (branch2) và đoạn dưới là của branch cần merge (branch1).

Nhiệm vụ bây giờ của bạn là xem xét nội dung bị conflict đó xem cần sửa chỗ nào, lấy đoạn nào, sau đó xóa đi những ký hiệu trên. Giả sử mình muốn lấy cả 2 thì lúc này mình sẽ sửa file demo.txt thành:

Sửa file demo.txt
<br />
Xin chào, đây là demo branch2<br />
<br />
Xin chào, đây là demo branch1

Ok, bây giờ ta cần commit để hoàn thành thao tác merge.

$ git add .
$ git commit -m "Xu ly conflict"

Như vậy là ta đã xử lý confick thành công. Xem hình để hiểu rõ hơn.

4. Lời kết

Như vậy là mình đã hướng dẫn các bạn xong cách merge 2 branch lại với nhau, đồng thời mình cũng hướng dẫn cách xử lý khi bị xung đột code. Khi đi làm thực tế nếu dự án có nhiều người làm thì bạn sẽ thực hiện thao tác này rất nhiều vì các thành viên trong nhóm có thể sửa một file, lúc này bạn cần phải xem kỹ code để tránh xử lý conflict không phù hợp.

Nguồn: freetuts.net