Не зовсім зрозуміло, який саме бажаний результат, тому існує певна плутанина щодо «правильного» способу його виконання у відповідях та коментарях. Я намагаюся дати огляд і побачити наступні три варіанти:
Спробуйте об'єднати та використовувати 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
Це те, що, наприклад , відповідає відповідь Алана В. Сміта .
Використовуйте вміст лише з 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
Зауважимо, що злиття, яке здійснює перший батьків, зараз - це те, що є branchB
лише другий 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
Це робить відповідь Пола Пладійса (не вимагаючи тимчасової гілки).