HocTotGit.io

Git cơ bản (Fundamentals)
  • Version Control là gì?
  • Git là gì?
  • Cài đặt và cấu hình Git
  • Quiz
  • Thuật ngữ cốt lõi
  • Tạo repository
  • Theo dõi file
  • Quy trình commit
  • Quiz
  • Kiểm tra log
  • Hủy thay đổi
  • Cập nhật commit
  • Quiz
  • Lý thuyết về nhánh
  • Tạo và chuyển nhánh
  • Merge nhánh
  • Giải quyết merge conflict
  • Quiz
Liên kết
Blog
Hỗ trợ

Email: work.lamsun@gmail.com

Yêu thích nền tảng

Hãy chia sẻ ý kiến của bạn

HocTotGit.io

© 2026 HocTotGit.

Merge nhánh

Sau khi phát triển tính năng trên các nhánh riêng biệt, bước quan trọng tiếp theo là hợp nhất chúng lại với nhau để tạo thành một sản phẩm hoàn chỉnh. Trong bài này, chúng ta sẽ tìm hiểu về Merge - cơ chế giúp bạn gộp các thay đổi từ nhánh này sang nhánh khác.


1. Lý thuyết về merge

Mục tiêu của việc Merge là di chuyển các tính năng đã được phát triển trong một branch này sang một branch khác.

Để làm điều này, Git sẽ thực hiện một quy trình thú vị: nó squash tất cả các commit riêng lẻ của nhánh tính năng thành một commit duy nhất gọi là Merge Commit. Sau đó, Git đặt commit đặc biệt này vào nhánh đích, từ đó tạo ra sự liên kết giữa điểm đầu của hai nhánh.


2. Cách thực hiện Merge

Trong ví dụ này, hãy tưởng tượng chúng ta đang muốn lấy các thay đổi từ nhánh widgets và gộp chúng vào nhánh main.

2.1. Chọn branch đích

Quy tắc vàng: Bạn luôn phải đứng ở nhánh mà bạn muốn nhận thay đổi. Hãy bắt đầu bằng cách chuyển sang nhánh đích:

git switch main

2.2. Bắt đầu merge

Khi đã ở nhánh main, hãy chạy lệnh merge và bảo cho Git biết bạn muốn gộp nhánh nào vào đây:

git merge widgets

Lúc này, Git sẽ kết hợp tất cả các thay đổi file từ nhánh widgets, và gộp chúng lại thành một merge commit đặc biệt.

Cảnh báo:

Đôi khi thao tác merge có thể thất bại. Nếu hai nhánh cùng sửa đổi một dòng code giống nhau, Git sẽ không biết nên lấy cái nào. Nếu bạn thấy các thông báo lỗi như dưới đây, nghĩa là bạn đã gặp Merge Conflict:

  • CONFLICT (content): Merge conflict

  • CONFLICT (modify/delete): Merge conflict

  • error: Your local changes... would be overwritten by merge

Chúng ta sẽ tìm hiểu cách xử lý xung đột này ở bài học tiếp theo.


2.3. Cung cấp commit message

Bước cuối cùng của quy trình merge là cung cấp một commit message. Sau khi chạy lệnh ở bước 2, Git sẽ yêu cầu bạn nhập message bằng cách tự động mở một trình soạn thảo văn bản (mặc định là VIM), và màn hình của bạn sẽ trông giống thế này:

Merge branch 'widgets' into main

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

Ở dòng đầu tiên, Git đã điền sẵn "Merge branch widgets". Bạn có thể giữ nguyên hoặc sửa lại với VIM:

  1. Nhấn phím i để bắt đầu chế độ chỉnh sửa (Insert mode).

  2. Sửa nội dung thông điệp.

  3. Khi xong, nhấn phím Esc để thoát chế độ sửa.

  4. Gõ :wq (write & quit) rồi nhấn Enter để lưu và thoát.

Gợi ý:

Nếu bạn muốn Git mở trình soạn thảo khác dễ dùng hơn như VS Code hay Notepad thay vì VIM, hãy xem lại bài cấu hình Git ở Module 1

Text editor
Ảnh minh họa: Text editor

2.4. Hoàn tất merge

Sau khi bạn lưu và đóng file ở bước 3, Git sẽ tự động hoàn tất thao tác merge. Output trên màn hình sẽ cho bạn biết những file nào đã được gộp:

Output
Auto-merging index.html
Merge made by the 'ort' strategy
index.html                        | 7 ++--
post.markdown                     | 8 +++++
2 files changed, 10 insertions(+), 4 deletions(-)

Kết quả này cho biết 2 file (index.html và post.markdown) đã được cập nhật. Nó cũng tóm tắt số lượng dòng thêm vào (insertions) và dòng bị xóa đi (deletions). Bạn có thể dùng lệnh git show để xem chi tiết sâu hơn về những thay đổi trong Merge Commit này.

Merge commit needed
Ảnh minh họa: Trường hợp cần merge commit để gộp thay đổi

3. Fast-Forward Merges

Trong một số trường hợp, Git có thể thực hiện một kiểu merge đặc biệt gọi là Fast-forward merge. Điều này xảy ra khi không có sự phân nhánh phức tạp (lịch sử là một đường thẳng).

Khi đó, Git chỉ cần "trượt" con trỏ của nhánh chính lên phía trước để bắt kịp nhánh tính năng mà không cần tạo ra một Merge Commit riêng biệt. Nếu điều này xảy ra, bước nhập message sẽ bị bỏ qua, và bạn sẽ thấy output như sau:

Updating c3f8fed..5f27bf3
Fast-forward
Fast-forward merge
Ảnh minh họa: Trường hợp có thể Fast-forward merge

Tổng kết

Các bước để merge nhánh trong Git gồm: Chọn branch đích với lệnh git switch → bắt đầu merge với lệnh git merge → cung cấp commit message → hoàn tất merge.

Merge nhìn có vẻ đơn giản... cho đến khi conflict xảy ra. Nhưng đừng quá lo lắng, chúng ta sẽ tìm hiểu cách xử lý conflict một cách dễ dàng ở bài học tiếp theo.

Tiếp theo: Giải quyết merge conflict