Hướng dẫn Git


Git và {{title}}


Đóng góp Git


Git nâng cao


Hoàn tác Git




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!

Kiểm tra bản thân với các bài tập

Bài tập:

Hợp nhất hello-youchi nhánh với chi nhánh hiện tại:

git  hello-you