Để chọn lọc hợp nhất các tệp từ nhánh này sang nhánh khác, hãy chạy
git merge --no-ff --no-commit branchX
nơi branchX
là chi nhánh bạn muốn kết hợp từ thành chi nhánh hiện hành.
Các --no-commit
tùy chọn sẽ dàn dựng các tập tin đã được sáp nhập bởi Git mà không thực sự cam kết họ. Điều này sẽ cung cấp cho bạn cơ hội để sửa đổi các tệp được hợp nhất theo cách bạn muốn và sau đó tự cam kết chúng.
Tùy thuộc vào cách bạn muốn hợp nhất các tệp, có bốn trường hợp:
1) Bạn muốn hợp nhất thực sự.
Trong trường hợp này, bạn chấp nhận các tệp được hợp nhất theo cách Git tự động hợp nhất chúng và sau đó cam kết chúng.
2) Có một số tệp bạn không muốn hợp nhất.
Ví dụ: bạn muốn giữ lại phiên bản trong nhánh hiện tại và bỏ qua phiên bản trong nhánh bạn đang hợp nhất.
Để chọn phiên bản trong nhánh hiện tại, hãy chạy:
git checkout HEAD file1
Điều này sẽ lấy phiên bản của file1
nhánh hiện tại và ghi đè lên file1
tự động được Git.
3) Nếu bạn muốn phiên bản trong nhánhX (và không phải là hợp nhất thực sự).
Chạy:
git checkout branchX file1
Điều này sẽ lấy lại phiên bản file1
trong branchX
và ghi đè file1
tự động được sáp nhập bởi Git.
4) Trường hợp cuối cùng là nếu bạn muốn chỉ chọn hợp nhất cụ thể trong file1
.
Trong trường hợp này, bạn có thể chỉnh sửa file1
trực tiếp sửa đổi , cập nhật nó thành bất cứ điều gì bạn muốn phiên bản file1
trở thành và sau đó cam kết.
Nếu Git không thể hợp nhất một tập tin tự động, nó sẽ báo cáo nội dung tập tin " Đã hủy " và tạo ra một bản sao, nơi bạn sẽ cần phải giải quyết mâu thuẫn bằng tay.
Để giải thích thêm với một ví dụ, giả sử bạn muốn hợp nhất branchX
vào nhánh hiện tại:
git merge --no-ff --no-commit branchX
Sau đó, bạn chạy git status
lệnh để xem trạng thái của các tệp sửa đổi.
Ví dụ:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Trường hợp file1
, file2
và file3
các tệp git đã được tự động hợp nhất thành công.
Điều này có nghĩa là những thay đổi trong master
và branchX
cho cả ba tệp này đã được kết hợp với nhau mà không có bất kỳ xung đột nào.
Bạn có thể kiểm tra cách hợp nhất được thực hiện bằng cách chạy git diff --cached
;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Nếu bạn tìm thấy một số hợp nhất không mong muốn thì bạn có thể
- chỉnh sửa tập tin trực tiếp
- tiết kiệm
git commit
Nếu bạn không muốn hợp nhất file1
và muốn giữ lại phiên bản trong nhánh hiện tại
Chạy
git checkout HEAD file1
Nếu bạn không muốn hợp nhất file2
và chỉ muốn phiên bản trongbranchX
Chạy
git checkout branchX file2
Nếu bạn muốn file3
được hợp nhất tự động, đừng làm gì cả.
Git đã hợp nhất nó vào thời điểm này.
file4
ở trên là một sự hợp nhất thất bại của Git. Điều này có nghĩa là có những thay đổi trong cả hai nhánh xảy ra trên cùng một dòng. Đây là nơi bạn sẽ cần giải quyết các xung đột bằng tay. Bạn có thể loại bỏ việc hợp nhất được thực hiện bằng cách chỉnh sửa tệp trực tiếp hoặc chạy lệnh kiểm tra cho phiên bản trong nhánh bạn muốn file4
trở thành.
Cuối cùng, đừng quên git commit
.