Chuyển đến nội dung chính

Hướng dẫn Cách Giải Quyết Xung Đột Merge trong Git

Tìm hiểu các lệnh và công cụ để hợp nhất hai nhánh và xử lý xung đột trong Git, một kỹ năng thiết yếu cho nhà khoa học dữ liệu.
Đã cập nhật 5 thg 10, 2026  · 10 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Git Merge Conflict là gì?

Hệ thống kiểm soát phiên bản Git hướng tới làm việc nhóm và đóng góp vào dự án. Lập trình viên thường làm việc trên các nhánh độc lập, và khi hoàn tất sẽ hợp nhất thay đổi vào nhánh chính. Cách làm việc nhóm này rất hiệu quả và năng suất trong việc tìm lỗi. Đôi khi, nhiều người cùng chỉnh sửa trên một dòng mã, và khi họ cố gắng hợp nhất thay đổi, xung đột xuất hiện. 

Git Merge Conflicts Graphic
Ví dụ đơn giản về xung đột Git

Sơ đồ trên minh họa hoàn hảo cách một xung đột merge điển hình xảy ra. Nhánh chính có một tệp chứa văn bản “HELLO, WORLD!”. Người dùng abid fork nhánh chính và đổi văn bản thành “HELLO, CAT!”. Trong khi abid đang thay đổi, nhánh chính gốc cũng được sửa thành “HELLO, DOG!”. Hợp nhất các nhánh này sẽ kích hoạt vấn đề xung đột merge và dừng quá trình.  

Nhiệm vụ chính của lệnh git merge là kết hợp hai nhánh và tự động giải quyết xung đột. Tuy nhiên, đôi lúc xung đột vẫn xảy ra khi hai người sửa cùng một dòng mã hoặc xóa các tệp quan trọng mà người khác đang làm việc. Git sẽ đánh dấu các thay đổi này và dừng quá trình hợp nhất. Trong trường hợp này, xung đột không được tự động giải quyết; thay vào đó lập trình viên phải chỉnh sửa thủ công hoặc dùng công cụ để xử lý xung đột.

Các kiểu Merge

Git merge và rebase là hai cách để tích hợp các commit từ nhánh đích vào nhánh nguồn. Bên cạnh đó, Git merge thực hiện kiểu fast-forward hoặc no-fast-forward. Nếu head của nhánh đích đã tồn tại trong nhánh nguồn thì theo mặc định, kiểu merge sẽ là fast-forward; nếu thiếu thì sẽ là no-fast-forward. Git rebase là một kiểu hợp nhất khác, sắp xếp lại lịch sử commit của nhánh đích. 

Fast-forward merge

Git Fast Forward Merge

Theo mặc định, Git merge sử dụng fast-forward để tích hợp các commit còn thiếu vào nhánh đích. Chẳng hạn, nó được dùng để cập nhật nhánh cục bộ từ máy chủ từ xa bằng lệnh pull. Fast-forward không gây ra xung đột merge vì Git sẽ không áp dụng nếu head của nhánh đích không có trong nhánh nguồn. 

No-fast-forward merge

Git No-fast-forward Merge

Một no-fast-forward merge còn gọi là hợp nhất ba chiều (three-way) hoặc hợp nhất thực sự. Nó tạo một commit mới trên nhánh đích bằng cách tích hợp các thay đổi ở cả nhánh nguồn và nhánh đích. Các thay đổi được hòa trộn sau commit chung cuối cùng ở cả hai nhánh. Trong ví dụ của chúng ta, đó là sau C. Kiểu merge này sẽ kích hoạt xung đột merge nếu nhánh nguồn mâu thuẫn với nhánh đích. Trên sơ đồ trên, merge commit (X) được tạo bằng cách tích hợp nhánh nguồn và nhánh đích, trong đó K và E là cha của merge commit. 

Rebase 

Git Rebase

Git rebase khác đôi chút so với các kiểu khác. Nó thay đổi trình tự lịch sử commit của nhánh đích. Rebase tích hợp nhánh nguồn theo cách mà nhánh đích chứa tất cả thay đổi từ nhánh nguồn, sau đó là toàn bộ các commit của nhánh đích kể từ commit chung cuối cùng. Trong ví dụ, commit chung cuối cùng là C, còn D và E đến từ nhánh nguồn. Commit K* giống K nhưng có id commit khác. Thay vì liên kết tới C, nó sẽ liên kết tới E. Tương tự no-fast-forward merge, nếu có vấn đề tương thích giữa nhánh nguồn và nhánh đích, Git sẽ yêu cầu giải quyết xung đột trước khi hoàn tất quá trình rebase. 

Các loại Xung Đột Merge trong Git

Có hai loại xung đột merge trong Git: xảy ra ngay lúc bắt đầu và trong quá trình hợp nhất - Atlassian. Phần này sẽ giúp bạn hiểu cả hai loại và cách xử lý từng tình huống. 

Ngay khi bắt đầu merge

Git merge sẽ thất bại ngay từ đầu nếu có thay đổi trong thư mục làm việc hoặc khu vực staging. Nó dừng sớm để tránh việc thay đổi hiện tại bị ghi đè bởi các commit đến từ thao tác merge. Điều này xuất phát từ xung đột với thay đổi cục bộ, không phải với nhánh hay lập trình viên khác. Để ổn định trạng thái cục bộ, bạn có thể dùng các lệnh như git stash, git commit, git checkout hoặc git reset.

Trong quá trình merge

Một lỗi xảy ra trong quá trình merge có nghĩa là có xung đột giữa nhánh nguồn và nhánh đích khi nhiều lập trình viên đã sửa cùng một tệp. Nếu hợp nhất tự động thất bại, Git sẽ yêu cầu bạn xử lý thủ công. Bạn cũng có thể dùng công cụ bên thứ ba để hỗ trợ trực quan hóa và tích hợp các thay đổi.

Các Lệnh để Giải Quyết Xung Đột Merge trong Git

Phần này trình bày các lệnh gốc của Git để trực quan hóa và xử lý xung đột merge. 

Các lệnh phổ biến

Git status là lệnh được dùng thường xuyên nhất để hiển thị trạng thái tệp đã sửa, khu vực staging và các commit. Trong quá trình merge, nó giúp xác định các tệp đang xung đột.  

git status

Git log với đối số --merge tạo danh sách các commit đang xung đột với nhánh nguồn. 

git log --merge

Theo mặc định, tùy chọn git diff sẽ hiển thị khác biệt giữa các thay đổi chưa commit và các commit trước đó. Git diff được dùng để so sánh nhánh, commit và tệp. Nó hữu ích để ngăn ngừa xung đột merge trong tương lai. 

git diff 

Các lệnh khi merge thất bại lúc bắt đầu

Checkout được dùng để hoàn tác thay đổi hoặc chuyển sang một nhánh mới/cũ. 

git checkout

Git reset dùng để hoàn nguyên các thay đổi trong thư mục làm việc và khu vực staging. 

git reset --mixed

Các lệnh cho xung đột trong quá trình merge

Đối số --abort sẽ dừng quá trình merge và khôi phục thay đổi về trạng thái ban đầu trước khi merge bắt đầu. 

git merge --abort

Git reset thường được dùng trong quá trình merge để hoàn nguyên các tệp xung đột về trạng thái gốc.

git reset

Giải quyết xung đột deleted-modified

Xung đột sẽ xảy ra nếu bạn đã xóa tệp trong nhánh hiện tại, còn người khác đã sửa nó ở nhánh khác. Trong trường hợp này, bạn có thể thêm lại tệp và commit,

git add <filename>

hoặc bạn có thể xóa tệp và commit. 

git rm <filename>

📌 Bảng ghi chú nhanh: giải quyết xung đột merge trong Git

Lệnh Mô tả Ví dụ sử dụng
git status Hiển thị các tệp có xung đột merge git status
git diff Hiển thị khác biệt giữa các commit hoặc nhánh git diff HEAD
git log --merge Hiển thị các commit liên quan đến xung đột git log --merge
git merge --abort Hủy một phiên merge và khôi phục trạng thái trước đó git merge --abort
git reset --hard HEAD Đặt lại nhánh về trạng thái đã commit gần nhất git reset --hard HEAD
git checkout -- <filename> Loại bỏ thay đổi trong một tệp cụ thể git checkout -- README.md
git mergetool Mở công cụ merge đã cấu hình để giải quyết xung đột git mergetool
git add <filename> Đánh dấu xung đột đã được giải quyết sau khi chỉnh sửa git add README.md
git commit -m "<message>" Lưu các thay đổi đã giải quyết sau xung đột merge git commit -m "Resolved merge conflict"
git rebase --continue Tiếp tục phiên rebase bị gián đoạn sau khi xử lý xung đột git rebase --continue
git rm <filename> Xóa một tệp đã bị xóa ở nhánh này nhưng được sửa ở nhánh khác git rm README.md
git push Đẩy thay đổi sau khi giải quyết xung đột merge git push origin main

Các Công Cụ Merge Trực Quan

Các công cụ merge là công cụ trực quan, thân thiện để xác định và giải quyết mọi loại xung đột merge. Một số công cụ hỗ trợ thêm các khả năng như so sánh thay đổi, thao tác Git, và quản lý dự án/kho lưu trữ. Có hai loại công cụ merge Git: chỉ chạy trong terminal và dựa trên GUI. Công cụ dựa trên terminal mở trong PowerShell hoặc Bash, còn công cụ GUI mở trong môi trường cửa sổ. 

Để kiểm tra danh sách công cụ đã cài đặt và hợp lệ, dùng:

git mergetool --tool-help 

Danh sách bao gồm tất cả công cụ hợp lệ có thể cài đặt và tích hợp với các lệnh git.

Ví dụ, chúng ta có vim và nvim được cài mặc định, và nếu bạn muốn xem khác biệt giữa một tệp chưa commit và một commit trước đó, gõ:

git difftool --tool=vimdiff3

Công cụ vimdiff3 làm nổi bật các thay đổi và cho phép bạn so sánh các commit ngay trong terminal. 

Difference between two versions of the same file in Vimdiff3

Khác biệt giữa hai phiên bản của cùng một tệp trong vimdiff3

Meld

Meld là công cụ miễn phí và mã nguồn mở, nâng việc giải quyết xung đột merge lên một tầm cao mới. Để tích hợp với Git, trước tiên bạn cần tải về và cài đặt từ trang chính thức. Tiếp theo, thêm nó vào cấu hình toàn cục để mặc định Git sẽ mở Meld khi giải quyết xung đột.  

Các lệnh cấu hình dưới đây chỉ áp dụng cho người dùng Windows. Trên Mac hoặc Linux, bạn chỉ cần thay đổi đường dẫn đến tệp cài đặt Meld. 

git config --global merge.tool meld 

git config --global mergetool.meld.path "C:/Program Files (x86)/Meld/Meld.exe" 

git config --global diff.tool meld

git config --global difftool.meld.path "C:/Program Files (x86)/Meld/Meld.exe"

Sau khi thiết lập mặc định, bạn có thể gõ git difftool trong thư mục Git cục bộ để mở Meld phiên bản Windows, hoặc dùng git mergetool để giải quyết xung đột như minh họa bên dưới.

Resolving a Merge Conflict with Meld in Git

Giải quyết xung đột merge với Meld

VSCode

VSCode cung cấp cách phổ biến và hiệu quả để xử lý xung đột merge. Khi Git không thể tự động hợp nhất tệp, VSCode sẽ tô sáng đoạn mã xung đột và đưa ra bốn tùy chọn: chấp nhận thay đổi hiện tại, chấp nhận thay đổi đến, chấp nhận cả hai thay đổi, và so sánh thay đổi. Bạn có thể dùng các tùy chọn này để làm sạch tệp và giải quyết mọi vấn đề còn tồn đọng. 

Resolving a Git Merge Conflict with VSCode

Giải quyết xung đột merge với VSCode

Nếu bạn đang tìm giải pháp toàn diện cho các thao tác Git, hãy thử GitKraken. Công cụ này có client miễn phí, tiện ích mở rộng cho VSCode và cung cấp công cụ tích hợp để xử lý xung đột merge.  

Cách Giải Quyết Xung Đột Merge trong Git

Phần này sẽ hướng dẫn bạn tạo một xung đột merge trong Git rồi xử lý nó. Bài hướng dẫn chia làm hai phần. Phần đầu giải quyết xung đột Git cục bộ; phần hai đề cập đến việc xử lý xung đột với máy chủ từ xa (GitHub).

Xung đột merge cục bộ

Tạo xung đột merge sẽ giúp chúng ta hiểu cách các vấn đề này phát sinh ngay từ đầu. Từ đó, chúng ta có thể nghĩ ra cách xử lý hiệu quả hoặc thậm chí ngăn chặn trong tương lai. 

Giờ chúng ta sẽ tạo một kho Git với một tệp duy nhất và tạo commit đầu tiên để bắt đầu. 

  1. Tạo thư mục tên datacamp.
  2. Chuyển vào thư mục datacamp.
  3. Khởi tạo Git.
  4. Tạo tệp README.md với tiêu đề cho sẵn.
  5. Stage và commit các thay đổi trong tệp.
mkdir datacamp
cd datacamp
git init
echo "# How to Resolve Git Merge Conflict" > README.md
git add README.md
git commit -m "first commit"

>>> [main (root-commit) 8199ea2] first commit
>>>  1 file changed, 1 insertion(+)
>>> create mode 100644 README.md

Tiếp theo, chúng ta sẽ tạo nhánh mới readme và đổi tiêu đề từ “..Git Merge..” thành “..Git..”. Thêm tệp và tạo commit bằng đối số -am.

git checkout -b readme
echo "# How to Resolve Git Conflict" > README.md
git commit -am "new branch conflict added"

>>> [readme 155f694] new branch conflict added
>>> 1 file changed, 1 insertion(+), 1 deletion(-)

Quay lại nhánh main và thêm một dòng mới vào tệp README.md bằng >>. Sau khi lưu thay đổi và tạo commit, chúng ta đã tạo thành công một xung đột giữa hai phiên bản của cùng một tệp. 

git checkout main
echo "New change in base branch" >> README.md
git commit -am " a line added to base branch Readme file"

>>> [main f1f1874]  a line added to base branch Readme file
>>> 1 file changed, 1 insertion(+)

Như bạn thấy, khi hợp nhất nhánh readme, Git hiển thị thông báo rằng hợp nhất tự động đã thất bại, và chúng ta phải sửa thủ công rồi commit kết quả. 

git merge readme

>>> Auto-merging README.md
>>> CONFLICT (content): Merge conflict in README.md
>>> Automatic merge failed; fix conflicts and then commit the result.

Chúng ta sẽ xử lý thủ công bằng cách mở và chỉnh sửa tệp trong Notepad. Ảnh dưới cho thấy mũi tên với HEAD, một vạch ngăn, và mũi tên theo hướng khác với readme. Phần HEAD thể hiện thay đổi hiện có ở nhánh main, còn phần readme là nhánh ta muốn merge, chứa tiêu đề khác. 

Resolving a Merge Conflict ManuallyGiải quyết xung đột merge thủ công 

Để xử lý, chúng ta sẽ xóa phần của nhánh readme, các mũi tên và vạch ngăn. Phiên bản cuối cùng của tệp nên sạch sẽ như dưới đây. 

Xung đột đã được giải quyết 

Sau khi thêm tệp và tạo commit, xung đột merge sẽ được giải quyết. Đây là cách phổ biến và đơn giản nhất để xử lý. Bạn cũng có thể dùng một IDE để xử lý nhanh hơn.

git commit -am "conflict resolved in file README.md"
>>> [main 9994a29] conflict resolved in file README.md

Xung đột merge với máy chủ từ xa

Để tạo và xử lý xung đột merge từ xa, chúng ta cần tạo một kho mới trên GitHub.

Creating a New Repository on GitHub

Tạo kho lưu trữ mới trên GitHub

Tiếp theo, thêm tên remote (origin) với địa chỉ kho và đẩy tất cả thay đổi từ kho cục bộ lên nhánh main từ xa bằng upstream.

git remote add origin https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
git push --set-upstream origin main


>>> Enumerating objects: 12, done.
>>> Counting objects: 100% (12/12), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (6/6), done.
>>> Writing objects: 100% (12/12), 998 bytes | 499.00 KiB/s, done.
>>> Total 12 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), done.
>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>>  * [new branch]      main -> main
>>> branch 'main' set up to track 'origin/main'.

Để tạo xung đột, chúng ta cần thay đổi tệp README.md ở cả phía từ xa và cục bộ. Bạn có thể dùng trình chỉnh sửa tệp trên GitHub để đổi “..Git merge..” thành “..Sit-Merge..”, rồi commit thay đổi. 

Making Changes in GitHub Editor

Thực hiện thay đổi trong trình chỉnh sửa GitHub

Sau đó, ở kho cục bộ, chỉnh tệp README.md để chỉ thêm một tiêu đề đơn giản và commit thay đổi. 

echo "# How to Resolve Merge Conflicts in Git Tutorial" > README.md
git commit -am "local branch changes in README.md"

>>> [main c677a13] local branch changes in README.md
>>>  1 file changed, 1 insertion(+), 4 deletions(-)

Cuối cùng, đẩy thay đổi lên máy chủ từ xa. Lưu ý Git đã báo lỗi kèm gợi ý cách khắc phục. 

git push


>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>>  ! [rejected]        main -> main (fetch first)
>>> error: failed to push some refs to 'https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git'
>>> hint: Updates were rejected because the remote contains work that you do
>>> hint: not have locally. This is usually caused by another repository pushing
>>> hint: to the same ref. You may want to first integrate the remote changes
>>> hint: (e.g., 'git pull ...') before pushing again.
>>> hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Chúng ta sẽ làm theo gợi ý đơn giản nhất: pull tệp từ máy chủ từ xa trước khi push. 

Pull tệp đã thất bại do xung đột merge trong tệp README.md. Ta có thể sửa thủ công bằng Notepad, nhưng lần này sẽ dùng công cụ trực quan để hỗ trợ. 

git pull


>>> remote: Enumerating objects: 5, done.
>>> remote: Counting objects: 100% (5/5), done.
>>> remote: Compressing objects: 100% (2/2), done.
>>> remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
>>> Unpacking objects: 100% (3/3), 681 bytes | 75.00 KiB/s, done.
>>> From https://github.com/kingabzpro/DataCamp-Git-Merge-Guide
>>>    aaf149d..49b7d14  main       -> origin/main
>>> Auto-merging README.md
>>> CONFLICT (content): Merge conflict in README.md
>>> Automatic merge failed; fix conflicts and then commit the result.

Công cụ merge Meld sẽ xác định các tệp xung đột và hiển thị chúng trong ứng dụng GUI của Meld.   

git mergetool

>>> Merging:
>>> README.md

>>> Normal merge conflict for 'README.md':
>>>   {local}: modified file
>>>   {remote}: modified file

Có ba cột: README_LOCAL_473.md, README.md, và README_LOCAL_473.md. Nếu bạn cho rằng thay đổi từ xa là hợp lý, hãy nhấp mũi tên đen ở cột remote; nếu muốn giữ thay đổi cục bộ, hãy nhấp mũi tên đen ở cột local. Đơn giản vậy thôi. 

Git: Conflict Resolved Using mergetool Meld

Xung đột được giải quyết bằng công cụ merge Meld

Sau khi chỉnh sửa, lưu tệp và commit. Như bạn thấy, việc đẩy tệp lên máy chủ từ xa không còn gây lỗi xung đột merge nữa.

git commit -am "remote main branch conflict resolved"
git push

>>> Enumerating objects: 16, done.
>>> Counting objects: 100% (16/16), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (6/6), done.
>>> Writing objects: 100% (10/10), 1.08 KiB | 550.00 KiB/s, done.
>>> Total 10 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), completed with 1 local object.
>>> To https://github.com/kingabzpro/DataCamp-Git-Merge-Guide.git
>>>    49b7d14..8f5c3aa  main -> main

Chúng ta đã xử lý thành công xung đột merge cả ở cục bộ lẫn từ xa. Những xung đột này là vấn đề thường ngày với các nhà khoa học dữ liệu và kỹ sư máy học. Để nâng cao kỹ năng thao tác Git, hãy học khóa Introduction to Git. 

Kết luận

Giải quyết xung đột merge trong Git là nhiệm vụ phức tạp và rủi ro cao vì bạn có thể làm hỏng phần mềm khi hợp nhất mã lỗi. Các công cụ merge cung cấp môi trường thân thiện và an toàn hơn để phát hiện và xử lý xung đột. Trong hướng dẫn này, chúng ta đã tìm hiểu vì sao xung đột Git xảy ra và cách giải quyết. Chúng ta cũng đã đề cập các kiểu merge và xung đột, các lệnh Git hữu ích và các công cụ trực quan. Ở phần cuối, chúng ta đã tạo xung đột merge và xử lý nó trong kho cục bộ lẫn từ xa. 

Nếu bạn mới làm quen với Git và muốn hiểu cách nó hoạt động, hãy đọc: Intro to Git and GitHub Tutorial. 


Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.

Câu hỏi Thường Gặp

Một số thực hành tốt để tránh xung đột merge trong Git là gì?

Để giảm rủi ro xung đột:

  • Luôn kéo thay đổi mới nhất (git pull origin main) trước khi bắt đầu công việc mới.
  • Trao đổi với nhóm để tránh làm việc trên cùng một dòng mã.
  • Thực hiện commit nhỏ, thường xuyên thay vì các commit lớn, phức tạp.
  • Sử dụng nhánh tính năng thay vì commit trực tiếp lên main.
  • Chạy git diff trước khi merge để sớm phát hiện xung đột tiềm ẩn.

Tôi có thể xử lý xung đột merge mà không cần terminal không?

Có! Nhiều công cụ Git dựa trên GUI giúp việc xử lý xung đột dễ dàng hơn:

  • VS Code: Tô sáng xung đột với các tùy chọn "Accept Incoming" và "Accept Current".
  • GitKraken: Giao diện trực quan để xử lý xung đột tương tác.
  • Meld / Beyond Compare: Công cụ merge giúp so sánh và xử lý khác biệt trực quan. Chạy git mergetool để dùng công cụ trực quan đã cấu hình.

Vì sao tôi vẫn gặp xung đột merge dù đã giải quyết?

Một số nguyên nhân có thể gồm:

  • Bạn quên stage (git add) và commit (git commit -m "Resolved conflict") các tệp đã giải quyết.
  • Một thành viên khác đã đẩy thay đổi xung đột mới sau khi bạn giải quyết phần của mình. Hãy thử git pull --rebase.
  • Bạn chưa đẩy các thay đổi đã giải quyết trước khi merge lại. Luôn chạy git push sau khi xử lý xung đột.

Tôi nên làm gì nếu lỡ hủy một phiên merge (git merge --abort)?

Nếu bạn đã hủy một phiên merge nhưng muốn thử lại, bạn có thể:

  • Đơn giản là chạy lại lệnh merge (git merge <branch-name>).
  • Dùng git reflog để kiểm tra trạng thái trước khi hủy và khôi phục nếu cần.

Làm sao hoàn tác lỗi khi giải quyết xung đột merge?

Nếu bạn mắc lỗi khi xử lý xung đột:

  • Chạy git reset --hard HEAD để loại bỏ mọi thay đổi và làm lại từ đầu.
  • Dùng git checkout -- <filename> để hoàn nguyên các tệp cụ thể về trạng thái ban đầu.
  • Nếu bạn đã commit sai, dùng git revert <commit-hash> để tạo một commit mới hoàn tác thay đổi.

Làm sao xử lý xung đột merge với tệp nhị phân?

Git không thể tự động merge tệp nhị phân (ví dụ: ảnh, PDF). Để xử lý:

  • Tự chọn phiên bản cần giữ và thay thế tệp.
  • Dùng git checkout --theirs <filename> hoặc git checkout --ours <filename> để giữ một phiên bản.
  • Commit tệp đã xử lý (git add <filename> && git commit -m "Resolved binary file conflict").

Sự khác nhau giữa git merge --abort và git reset --merge là gì?

  • git merge --abort: Hoàn tác phiên merge một cách an toàn và khôi phục nhánh về trạng thái trước khi merge.
  • git reset --merge: Tương tự, nhưng giữ lại các tệp đã stage và có thể hữu ích khi bạn muốn giữ một số thay đổi.

Làm sao xử lý xung đột merge khi đẩy lên GitHub?

Nếu git push thất bại với lỗi xung đột merge, hãy thử:

  • Kéo thay đổi mới nhất: git pull origin main --rebase
  • Giải quyết xung đột thủ công trên nhánh cục bộ của bạn.
  • Stage và commit các tệp đã xử lý:
git add <conflicted-file>
git commit -m "Resolved merge conflict"
  • Push lại: git push origin main

Xung đột rebase là gì và làm sao khắc phục?

Xung đột rebase xảy ra khi chạy git rebase <branch> và thay đổi không thể áp dụng trơn tru. Để khắc phục:

  • Giải quyết xung đột thủ công, sau đó chạy git rebase --continue.
  • Nếu bạn muốn hủy rebase, dùng git rebase --abort.
  • Dùng git rebase --skip nếu muốn bỏ qua commit gây xung đột.

Tôi có thể merge các nhánh không xung đột bằng thiết lập Git không?

Git có chiến lược tự động hợp nhất đôi khi hữu ích:

  • Dùng git merge -X theirs <branch> để luôn chấp nhận thay đổi của nhánh kia.
  • Dùng git merge -X ours <branch> để luôn giữ thay đổi của nhánh bạn. Tuy nhiên, cách này không tuyệt đối và cần thận trọng.
Chủ đề
Git
Khoa học Dữ liệu

Tìm hiểu thêm về Git với các khóa học này!

Khóa học

Giới thiệu về Git

2 giờ
105.1K
Khám phá các nguyên tắc cơ bản của Git trong việc kiểm soát phiên bản cho các dự án phần mềm và dữ liệu của quý vị.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm