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ốiSSH
tới máyUbuntu.
- Đã có
Repository
trê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 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.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.