Il n'est pas tout à fait clair quel est votre résultat souhaité, il y a donc une certaine confusion sur la façon "correcte" de le faire dans les réponses et leurs commentaires. J'essaie de donner un aperçu et de voir les trois options suivantes:
Essayez de fusionner et utilisez B pour les conflits
Ce n'est pas la "leur version pour git merge -s ours
" mais la "leur version pour git merge -X ours
" (qui est l'abréviation de git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
C'est ce que fait par exemple la réponse d'Alan W. Smith .
Utiliser uniquement le contenu de B
Cela crée un commit de fusion pour les deux branches mais rejette toutes les modifications branchA
et ne conserve que le contenu 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
Notez que la fusion valide maintenant le premier parent est celle de branchB
et que le second est de branchA
. C'est ce que fait par exemple la réponse de Gandalf458 .
Utilisez le contenu de B uniquement et conservez l'ordre parent correct
Ceci est la vraie "leur version pour git merge -s ours
". Il a le même contenu que dans l'option précédente (c'est-à-dire seulement celui de branchB
) mais l'ordre des parents est correct, c'est-à-dire que le premier parent vient branchA
et le second de 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
C'est ce que fait la réponse de Paul Pladijs (sans nécessiter de succursale temporaire).