Tidak sepenuhnya jelas apa hasil yang Anda inginkan, sehingga ada beberapa kebingungan tentang cara "benar" melakukannya dalam jawaban dan komentar mereka. Saya mencoba memberikan ikhtisar dan melihat tiga opsi berikut:
Coba gabungkan dan gunakan B untuk konflik
Ini bukan "versi mereka untuk git merge -s ours
" tetapi "versi mereka untuk git merge -X ours
" (yang merupakan kependekan dari git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
Inilah yang misalnya jawaban Alan W. Smith .
Gunakan konten dari B saja
Ini menciptakan gabungan komit untuk kedua cabang tetapi membuang semua perubahan dari branchA
dan hanya menyimpan konten dari 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
Perhatikan bahwa gabungan komit dengan orang tua pertama sekarang adalah dari branchB
dan hanya yang kedua dari branchA
. Inilah yang misalnya jawaban Gandalf458 .
Gunakan konten hanya dari B dan pertahankan urutan induk yang benar
Ini adalah "versi mereka yang sebenarnya git merge -s ours
". Ini memiliki konten yang sama seperti pada opsi sebelumnya (yaitu hanya itu dari branchB
) tetapi urutan orang tua benar, yaitu orang tua pertama berasal branchA
dan yang kedua dari 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
Inilah yang dilakukan jawaban Paul Pladijs (tanpa membutuhkan cabang sementara).