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.

1. 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à một lệnh hợp nhất các nhánh trong Git

2. 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.

Mô hình hợp nhất stage branch vào master branch

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.

Merge commit được tạo ra trong quá trình hợp nhất

3. 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:

3.1. 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:

Mô hình hợp nhất “tua nhanh” – Fast Forward Merge với Git Merge

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ế.

3.2. 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 trong Git

4. 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.

Xung đột hợp nhất – Merge conflict trong Git

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é!

Tìm hiểu thêm:

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.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
February 09, 2021
Share this post to:
Tags:
git
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Hướng dẫn chi tiết cách push code lên Git

Hướng dẫn chi tiết cách push code lên Git

Có lẽ các bạn theo đuổi lĩnh vực IT đã quen thuộc với Git và GitHub rồi đúng không nhỉ? Tuy nhiên, Got It nhận thấy, một vài bạn đọc theo dõi blog vẫn còn mơ hồ, hoặc chưa biết cách để push code lên Git. Vậy thì hôm nay, chúng mình sẽ mang đến […]
Hướng dẫn cách tạo branch trong Git

Hướng dẫn cách tạo branch trong Git

Làm việc trực tiếp trong branch (nhánh) chính của một repository trên GitHub sẽ vô cùng nguy hiểm. Bởi lẽ, bạn sẽ có nguy cơ đưa những dòng code lỗi (bug) vào project đó mà không thông qua việc review code. Vì vậy, để tránh điều này xảy ra, bạn nên tạo một branch mới […]
Git fetch là gì? Phân biệt git fetch và git pull

Git fetch là gì? Phân biệt git fetch và git pull

Rất nhiều các bạn đang làm việc trong lĩnh vực IT thắc mắc về cách phân biệt giữa git fetch và git pull. Vậy git fetch là gì? Câu lệnh này hoạt động như thế nào? Và đâu là sự khác biệt giữa hai lệnh git fetch và git pull? Hãy cùng Got It tìm […]
Git và GitHub — liệu bạn đã thật sự biết cách sử dụng?

Git và GitHub — liệu bạn đã thật sự biết cách sử dụng?

Biến Git và GitHub trở thành công cụ đắc lực cùng Software Engineer nhà Got It!
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ì? Nó đượ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 cái […]
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ì […]