Não está totalmente claro qual é o resultado desejado, por isso há alguma confusão sobre a maneira "correta" de fazê-lo nas respostas e nos comentários deles. Eu tento dar uma visão geral e ver as três opções a seguir:
Tente mesclar e use B para conflitos
Esta não é a "versão deles para git merge -s ours
", mas a "versão deles para git merge -X ours
" (que é a abreviação de git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
É isso que, por exemplo, a resposta de Alan W. Smith faz.
Use somente conteúdo de B
Isso cria uma consolidação de mesclagem para os dois ramos, mas descarta todas as alterações branchA
e mantém apenas o conteúdo 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
Observe que a mesclagem confirma o primeiro pai agora é de branchB
e somente o segundo é de branchA
. Isto é o que, por exemplo, a resposta de Gandalf458 faz.
Use apenas o conteúdo de B e mantenha a ordem dos pais correta
Esta é a verdadeira "versão deles para git merge -s ours
". Ele tem o mesmo conteúdo da opção anterior (ou seja, somente a partir de branchB
), mas a ordem dos pais está correta, ou seja, a primeira mãe vem branchA
e a segunda parte 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
É o que a resposta de Paul Pladijs faz (sem exigir uma ramificação temporária).