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.
Bài viết này được đăng tại [free tuts .net]
$ 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 branch1 và branch2.
$ 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:
<<<<<<< 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:
Xin chào, đây là demo branch2 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.