Git Merge là gì? Những kiến thức cơ bản về Git Merge

Hợp nhất là một quá trình rất quan trọng khi làm việc với Git. Trong bài viết này, chúng ta sẽ thảo luận về lệnh hợp nhất Git Merge rất quen thuộc trong Git. Nếu bạn là người mới bắt đầu sử dụng Git và đang muốn hiểu quy trình hợp nhất trong Git, thì bạn nên đọc bài viết này.

Git Merge là gì?

Git Merge là một lệnh dùng để hợp nhất các chi nhánh độc lập thành một nhánh duy nhất trong Git.

Khi sử dụng lệnh hợp nhất trong Git, chỉ có nhánh hiện tại được cập nhật để phản ánh sự hợp nhất, còn nhánh đích sẽ không bị ảnh hưởng. Điều này có nghĩa rằng, Git Merge thường được sử dụng kết hợp với git checkout để chọn nhánh hiện tại và git branch để xóa nhánh nguồn đã lỗi thời.

Git Merge là gì
Git Merge là một lệnh hợp nhất các nhánh trong Git (Nguồn: Atlassian)

Cách thức hoạt động của Git Merge

Công dụng chính của lệnh Git Merge là hợp nhất hai nhánh. Nó cũng được dùng để hợp nhất chuỗi commit (cam kết) thành một lịch sử thống nhất.

Để hiểu rõ cách thức hoạt động của lệnh Git Merge, chúng ta sẽ lấy một mẫu hợp nhất nhánh làm ví dụ. Trong hình minh họa sau, Git Merge sẽ lấy hai nhánh và tìm thấy một commit cơ sở chung giữa chúng. Khi Git tìm thấy một commit cơ sở chung, nó sẽ tạo một cam kết hợp nhất (merge commit) mới và hợp nhất các thay đổi theo trình tự của mỗi cam kết hợp nhất. Ở đây, chúng ta có 2 nhánh: master branch và stage branch. Bây giờ, chúng ta sẽ hợp nhất stage branch vào master branch.

Cách thức hoạt động của Git Merge
Mô hình hợp nhất stage branch vào master branch (Nguồn: W3dos)

Các cam kết hợp nhất là duy nhất vì chúng có hai cam kết chính. Git tự động hợp nhất các lịch sử riêng biệt khi một cam kết hợp nhất mới được tạo. Nó sẽ không kết hợp dữ liệu được thay đổi trong cả hai lịch sử. Tình huống này được gọi là “version control conflict” (xung đột kiểm soát phiên bản). Khi xảy ra xung đột, Git sẽ cần sự can thiệp của người dùng để tiếp tục.

Cách hợp nhất của Git Merge
Merge commit được tạo ra trong quá trình hợp nhất (Nguồn: W3docs)

Quy trình hợp nhất bằng lệnh Git Merge

Việc hợp nhất trong Git sẽ diễn ra theo quy trình sau:

  • Thực thi git status để đảm bảo rằng nó đang trỏ HEAD đến đúng nhánh nhận hợp nhất. Chạy git checkout để chuyển sang nhánh nhận.
  • Tìm nạp các remote commit mới nhất bằng lệnh git fetch. Đảm bảo rằng chi nhánh nhận và chi nhánh hợp nhất được cập nhật những thay đổi từ xa mới nhất.
  • Kết thúc quá trình tìm nạp, sử dụng lệnh git pull để cập nhật nhánh chính.
  • Cuối cùng, thực hiện lệnh git merge <branch name>, trong đó branch name là tên tên của nhánh sẽ được ghép vào nhánh nhận.

Hợp nhất bằng lệnh Git Merge trong Git có thể được thực hiện theo hai hình thức dưới đây:

Fast Forward Merge

Đây là một dạng hợp nhất “tua nhanh”, thường xảy ra khi có một đường dẫn tuyến tính từ đầu nhánh hiện tại đến nhánh đích. Với Fast Forward Merge, Git sẽ di chuyển đầu nhánh hiện tại lên đầu nhánh đích. Dưới đây là một ví dụ về hợp nhất tua nhanh:

Tuy nhiên, chúng ta không thể sử dụng Fast Forward Merge khi các nhánh đã phân kỳ. Trong trường hợp này, Git sử dụng 3-way merge (hợp nhất 3 chiều) như một giải pháp thay thế.

Mô hình hợp nhất "tua nhanh" - Fast Forward Merge
Mô hình hợp nhất “tua nhanh” – Fast Forward Merge với Git Merge (Nguồn: dev.to)

3-way merge

Khi không có đường dẫn đến nhánh đích, Git không có lựa chọn nào khác ngoài việc kết hợp chúng thông qua hợp nhất 3 chiều. Việc hợp nhất này sử dụng thêm một lệnh Git Commit để buộc hai nhánh lại với nhau.

Hợp nhất 3 chiều
Hợp nhất 3 chiều trong Git (Nguồn: dev.to)

Cách giải quyết xung đột hợp nhất

Khi bạn muốn hợp nhất hai nhánh và phần giống nhau của cùng một tệp bị thay đổi, xung đột hợp nhất xảy ra. Nguyên nhân là do Git không tìm ra phiên bản nào sẽ sử dụng. Khi điều này xảy ra, nó sẽ dừng trước khi cam kết hợp nhất để giải quyết xung đột đó.

Xung đột hợp nhất chỉ xảy ra trong trường hợp hợp nhất 3 chiều. Thông thường, Git sử dụng quy trình edit/stage/commit để giải quyết xung đột hợp nhất. Việc chạy lệnh git status sẽ hiển thị các tệp cần được giải quyết.

Giải quyết xung đột hợp nhất
Xung đột hợp nhất – Merge conflict trong Git (Nguồn: javatpoint)

Trong trường hợp có xung đột, Git sẽ chỉnh sửa nội dung của các tệp bị ảnh hưởng bằng các chỉ báo trực quan đánh dấu cả hai mặt của nội dung xung đột. Các điểm đánh dấu trực quan này là:

  • <<<<<<<- Đánh dấu xung đột , xung đột bắt đầu sau dòng này.
  • =======- Phân chia những thay đổi của bạn với những thay đổi trong nhánh khác.
  • >>>>>>>- Kết thúc các dòng mâu thuẫn.

Sau khi tìm thấy phần xung đột, chúng ta sẽ chạy lệnh git add trên các tệp bị xung đột. Thao tác này nhằm thông báo cho cho Git biết các xung đột đã được giải quyết. Cuối cùng, thực thi lệnh git commit để tạo cam kết hợp nhất.

Trên đây là những kiến thức tổng quan về lệnh Git Merge. Hy vọng những chia sẻ của Got It sẽ giúp bạn hiểu rõ hơn về cách hợp nhất các chi nhánh và giải quyết các xung đột trong Git. Nếu bạn muốn làm chủ hệ thống kiểm soát phiên bản Git, hãy trang bị cho bản thân kỹ năng hợp nhất các nhánh bằng Git Merge nhé!

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

Hao Vu
Hao Vu
February 09, 2021
0
Share this post to:
Tags:
git
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Git Pull là gì? Mô hình hoạt động của lệnh Git Pull

Git Pull là gì? Mô hình hoạt động của lệnh Git Pull

Vì lệnh Git Fetch và Git Merge được sử dụng thường xuyên nên Git đã kết hợp hai lệnh này thành một lệnh đặc biệt gọi là Git Pull. Vậy Git Pull là gì? Git Pull được sử dụng như thế nào? Trong bài viết này, Got It sẽ mang đến cho các bạn một […]
Git Merge là gì? Những kiến thức cơ bản về Git Merge

Git Merge là gì? Những kiến thức cơ bản về Git Merge

Hợp nhất là một quá trình rất quan trọng khi làm việc với Git. Trong bài viết này, chúng ta sẽ thảo luận về lệnh hợp nhất Git Merge rất quen thuộc trong Git. Nếu bạn là người mới bắt đầu sử dụng Git và đang muốn hiểu quy trình hợp nhất trong Git, thì […]
Git Commit là gì? Git Commit được sử dụng như thế nào?

Git Commit là gì? Git Commit được sử dụng như thế nào?

Trong Git có một lệnh cho phép các lập trình viên ghi những thay đổi của dự án một cách dễ dàng gọi là Git Commit. Vậy chính xác Git Commit là gì? Git Commit được sử dụng như thế nào? Hãy cùng Got It tìm hiểu trong bài viết dưới đây nhé! Mục lụcGit […]
8 tính năng hữu ích của Git Stash

8 tính năng hữu ích của Git Stash

Trong quá trình làm việc với Git Tools, chắc hẳn các bạn đều đã nghe đến khái niệm Git Stash. Vậy nó là gì? Làm thế nào để công việc đơn giản hơn với công cụ này? Hãy cùng Got It Vietnam khám phá qua bài viết sau nhé! Mục lục1. Git Stash là gì?2. […]
Git Rebase là gì? Khi nào nên sử dụng Git Rebase?

Git Rebase là gì? Khi nào nên sử dụng Git Rebase?

Hai khái niệm làm nhiều kỹ sư IT đau đầu và khó phân biệt nhất chắc chắn là Git Rebase và Git Merge. Vậy Git Rebase là gì và khi nào nên sử dụng? Tất cả những câu hỏi này sẽ được giải đáp trong bài viết này của Got It Vietnam. Mục lục1. Git […]
Những điều bạn chưa biết về Git Clone

Những điều bạn chưa biết về Git Clone

Ở những bài đăng trước, Got It Vietnam đã có những bài đăng về hệ thống Git cùng những ưu điểm của nó. Git Clone là một câu lệnh phổ biến trong hệ thống Git mà mọi lập trình viên phải biết. Vậy sử dụng Git Clone như thế nào? Những ví dụ về cách […]