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.
Terminalkết nốiSSHtới máyUbuntu.- Đã có
RepositorytrênUbuntu(Bài viết sử dụngFirstProjectGit).
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 codetừ nhánh dev tới nhánh staging - Giải quyết
conflicttrê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.txt và lab_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.