Git Branch Merge
Hợp nhất các chi nhánh
Chúng tôi đã sẵn sàng bản sửa lỗi khẩn cấp và vì vậy hãy hợp nhất nhánh chính và nhánh khắc phục sự cố khẩn cấp.
Đầu tiên, chúng ta cần thay đổi thành nhánh chính:
Thí dụ
git checkout master
Switched to branch 'master'
Bây giờ chúng tôi hợp nhất nhánh hiện tại (chính) với sửa chữa khẩn cấp:
Thí dụ
git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Vì nhánh khắc phục sự cố khẩn cấp đến trực tiếp từ master và không có thay đổi nào khác được thực hiện đối với master trong khi chúng tôi đang làm việc, Git coi đây là sự tiếp nối của master. Vì vậy, nó có thể "Tua đi nhanh", chỉ trỏ cả bản chính và bản sửa lỗi khẩn cấp vào cùng một cam kết.
Vì bản sửa lỗi chính và bản sửa lỗi khẩn cấp bây giờ về cơ bản giống nhau, chúng tôi có thể xóa bản sửa lỗi khẩn cấp, vì nó không còn cần thiết nữa:
Thí dụ
git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).
Hợp nhất xung đột
Bây giờ chúng ta có thể chuyển sang hello-world-images và tiếp tục hoạt động. Thêm một tệp hình ảnh khác (img_hello_git.jpg) và thay đổi index.html, để nó hiển thị:
Thí dụ
git checkout hello-world-images
Switched to branch 'hello-world-images'
Thí dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World
from Space" style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Bây giờ, chúng tôi đã hoàn thành công việc của mình ở đây và có thể phân chia giai đoạn và cam kết cho chi nhánh này:
Thí dụ
git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
2 files changed, 1 insertion(+)
create mode 100644 img_hello_git.jpg
Chúng tôi thấy rằng index.html đã được thay đổi trong cả hai nhánh. Bây giờ chúng tôi đã sẵn sàng để hợp nhất các hình ảnh hello-world thành hình ảnh chính. Nhưng điều gì sẽ xảy ra với những thay đổi mà chúng tôi đã thực hiện gần đây trong tổng thể?
Thí dụ
git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Hợp nhất không thành công, vì có xung đột giữa các phiên bản cho index.html. Hãy để chúng tôi kiểm tra trạng thái:
Thí dụ
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
Điều này xác nhận rằng có xung đột trong index.html, nhưng các tệp hình ảnh đã sẵn sàng và được thực hiện theo giai đoạn.
Vì vậy, chúng ta cần phải khắc phục mâu thuẫn đó. Mở tệp trong trình chỉnh sửa của chúng tôi:
Thí dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how
merging works.</p>
=======
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images
</body>
</html>
Chúng tôi có thể thấy sự khác biệt giữa các phiên bản và chỉnh sửa nó như chúng tôi muốn:
Thí dụ
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
Bây giờ chúng ta có thể tạo index.html và kiểm tra trạng thái:
Thí dụ
git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
modified: index.html
Xung đột đã được khắc phục và chúng tôi có thể sử dụng cam kết để kết thúc quá trình hợp nhất:
Thí dụ
git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts
Và xóa nhánh hello-world-images:
Thí dụ
git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).
Bây giờ bạn đã hiểu rõ hơn về cách hoạt động của các nhánh và hợp nhất. Đã đến lúc bắt đầu làm việc với kho lưu trữ từ xa!