원하는 결과가 무엇인지 명확하게 알 수 없으므로 답변과 의견에 "올바른"방법을 사용하는 것에 대해 약간의 혼란이 있습니다. 개요를 제공하려고 시도하고 다음 세 가지 옵션을 봅니다.
병합을 시도하고 충돌에 B를 사용하십시오.
입니다 하지 은 "에 대한 그들의 버전 git merge -s ours
"하지만 "에 대한 그들의 버전 git merge -X ours
(대한 짧은" git merge -s recursive -X ours
) :
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
예를 들어 Alan W. Smith의 답변 이 이에 해당합니다.
B의 컨텐츠 만 사용
이렇게하면 두 분기 모두에 대해 병합 커밋이 만들어 지지만의 모든 변경 사항은 버리고 branchA
내용 만 유지됩니다 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
이제 첫 번째 상위 커밋 커밋은 from branchB
이고 두 번째 만 from branchA
입니다. 이것이 예를 들어 간달프 458의 답변 입니다.
B의 콘텐츠 만 사용하고 올바른 부모 순서를 유지하십시오.
이것은 "의 실제 버전 git merge -s ours
"입니다. 이 같은 전에 옵션 등의 내용 (즉,에서, 즉에만있다 branchB
)하지만를 부모의 순서가 올바른, 즉 최초의 부모로부터 온다 branchA
과에서 두 번째 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
이것이 Paul Pladijs의 답변입니다 (임시 지점 필요 없음).