No está del todo claro cuál es el resultado deseado, por lo que existe cierta confusión sobre la forma "correcta" de hacerlo en las respuestas y sus comentarios. Intento dar una visión general y ver las siguientes tres opciones:
Intente fusionar y usar B para conflictos
Esta no es la "versión de ellos para git merge -s ours
" sino la "versión de ellos para git merge -X ours
" (que es la abreviatura de git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
Esto es lo que hace, por ejemplo, la respuesta de Alan W. Smith .
Use contenido de B solamente
Esto crea una confirmación de fusión para ambas ramas, pero descarta todos los cambios branchA
y solo mantiene el contenido 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
Tenga en cuenta que la fusión confirma que el primer padre ahora es de branchB
y solo el segundo es de branchA
. Esto es lo que hace, por ejemplo, la respuesta de Gandalf458 .
Use contenido de B solamente y mantenga el orden principal correcto
Esta es la verdadera "versión para ellos git merge -s ours
". Tiene el mismo contenido que en la opción anterior (es decir, solo el de branchB
), pero el orden de los padres es correcto, es decir, el primer padre proviene branchA
y el segundo 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
Esto es lo que hace la respuesta de Paul Pladijs (sin requerir una rama temporal).