Bài 10. Xử lý conflict

Giới thiệu

Trong bài viết này chúng ta sẽ xoay quanh một khía cạnh khác của merge code trong git, đó là resolve conflict. Trong dự án, các thành viên cùng nhau đưa mã nguồn của những tính năng hoặc mã nguồn sửa lỗi tới nhánh làm việc chung, dẫn tới có thể tạo nên xung đột trong mã nguồn(cùng tạo tệp tin, nội dung trong cùng tệp tin khác nhau, tệp tin được tạo và bị xóa bởi các thành viên khác nhau). Khi có conflict trong merge code xảy ra, hãy bình tĩnh, bạn là người giỏi trong giải quyết xung đột, bạn sẽ resolve conflict trong merge code.

Chuẩn bị

  • Đã hoàn thành bài trước.
  • Terminal kết nối SSH tới máy Ubuntu.
  • Đã có Repository trên Ubuntu (Bài viết sử dụng FirstProjectGit).

Nội dung

Trước khi thực hiện các bước, bạn cần kéo commit từ nhánh staging trên repo về local

git checkout -b staging
git pull origin staging

 

Chúng ta sẽ tạo thêm nhánh dev từ nhánh staging, kịch bản là:

  • Thay đổi mã nguồn trên cả 2 nhánh trong cùng một tệp tin
  • Thực hiện merge code từ nhánh dev tới nhánh staging
  • Giải quyết conflict trên nhánh dev

1. Tạo nhánh dev từ nhánh staging

git checkout staging
git branch dev
git branch

 

2. Tạo thay đổi trên nhánh staging

Chuyển sang nhánh staging:

git checkout staging

 

Tạo ra tệp tin hello.txt và tệp tin lab_6.txt

touch hello.txt
touch lab_6.txt

 

Ghi nội dung cho tệp tin hello.txt (sử dụng vim hoặc nano)

print("Hello python")
console.log("Hello Javascript")
echo "Hello bash"

 

Sau đó tạo commit cho sự thay đổi này:

git add .
git commit -am "hello in python, js, bash"

 

4. Tạo thay đổi trên nhánh dev

Chuyển sang nhánh dev:

git checkout dev

 

Tạo ra tệp tin hello.txt và tệp tin lab_7.txt

touch hello.txt
touch lab_7.txt

 

ghi nội dung cho tệp tin hello.txt (sử dụng vim hoặc nano)

print("Hello python")
System.out.println("Hello Java"); 
fmt.Println("Hello Golang")

 

Sau đó tạo commit cho sự thay đổi này:

git add .
git commit -am "hello in python, java, golang"

 

5. Thực hiện merge code từ staging vào dev

Chúng ta cần ở không gian làm việc của nhánh dev, sau đó merge code từ nhánh staging về nhánh dev.

git checkout dev
git merge staging

 

Oh no, conflict đã xảy ra tại tệp tin hello.txt. Chỉ có tệp tin lab_6.txtlab_7.txt đã được git thực merge tự động thành công.

6. Giải quyết conflict

Mở tệp tin hello.txt, bạn sẽ thấy xung đột được git biểu thị dựa trên 2 nhánh HEAD(nhánh hiện tại) và nhánh staging.

 

Để resolve conflict này, bạn cần hiểu nội dung của cả 2 phần, ở trong bài viết chúng ta sẽ chọn những dòng code cần (“hello java”, “hello golang”, và “hello bash”) còn lại những dòng code trong phần conflict chúng ta xóa.

Chúng ta cần tạo ra commit mới sau khi đã resolve

git status
git add .
git commit -am "merge code from staging and resolve conflict"

 

7. Merge code từ dev sang staging

Ở bước này, bạn hãy nghĩ cách để merge code từ nhành dev sang staging, liệu conflict có xảy ra hay không?


Tác giả: Đỗ Thiên Giang

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên