Nó không hoàn toàn rõ ràng kết quả mong muốn của bạn là gì, vì vậy có một số nhầm lẫn về cách làm "chính xác" trong câu trả lời và nhận xét của họ. Tôi cố gắng đưa ra một cái nhìn tổng quan và xem ba tùy chọn sau:
Hãy thử hợp nhất và sử dụng B cho các xung đột
Đây không phải là "phiên bản của họ cho git merge -s ours
" mà là "phiên bản của họ cho git merge -X ours
" (viết tắt của git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
Đây là những gì ví dụ câu trả lời của Alan W. Smith .
Chỉ sử dụng nội dung từ B
Điều này tạo ra một cam kết hợp nhất cho cả hai nhánh nhưng loại bỏ tất cả các thay đổi từ branchA
và chỉ giữ nội dung từ đó branchB
.
# Get the content you want to keep.
# If you want to keep branchB at the current commit, you can add --detached,
# else it will be advanced to the merge commit in the next step.
git checkout branchB
# Do the merge an keep current (our) content from branchB we just checked out.
git merge -s ours branchA
# Set branchA to current commit and check it out.
git checkout -B branchA
Lưu ý rằng hợp nhất cam kết cha mẹ đầu tiên bây giờ là từ branchB
và chỉ thứ hai là từ branchA
. Đây là những gì ví dụ như câu trả lời của Gandalf458 .
Chỉ sử dụng nội dung từ B và giữ đúng thứ tự cha mẹ
Đây là "phiên bản của họ" thực sự git merge -s ours
. Nó có cùng nội dung như trong tùy chọn trước đó (nghĩa là chỉ từ branchB
) nhưng thứ tự của cha mẹ là chính xác, tức là cha mẹ đầu tiên đến từ branchA
và thứ hai từ branchB
.
git checkout branchA
# Do a merge commit. The content of this commit does not matter,
# so use a strategy that never fails.
# Note: This advances branchA.
git merge -s ours branchB
# Change working tree and index to desired content.
# --detach ensures branchB will not move when doing the reset in the next step.
git checkout --detach branchB
# Move HEAD to branchA without changing contents of working tree and index.
git reset --soft branchA
# 'attach' HEAD to branchA.
# This ensures branchA will move when doing 'commit --amend'.
git checkout branchA
# Change content of merge commit to current index (i.e. content of branchB).
git commit --amend -C HEAD
Đây là những gì câu trả lời của Paul Pladijs (không yêu cầu một chi nhánh tạm thời).