Non è del tutto chiaro quale sia il risultato desiderato, quindi c'è qualche confusione sul modo "corretto" di farlo nelle risposte e nei loro commenti. Provo a dare una panoramica e vedere le tre opzioni seguenti:
Prova a unire e usa B per i conflitti
Questa non è la "loro versione per git merge -s ours
" ma la "loro versione per git merge -X ours
" (che è l'abbreviazione di git merge -s recursive -X ours
):
git checkout branchA
# also uses -s recursive implicitly
git merge -X theirs branchB
Questo è ciò che fa ad esempio la risposta di Alan W. Smith .
Usa solo contenuti da B.
Ciò crea un commit di unione per entrambi i rami ma ignora tutte le modifiche branchA
e ne impedisce solo il contenuto 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
Nota che l'unione commette il primo genitore ora è quello di branchB
e solo il secondo è di branchA
. Questo è ciò che fa ad esempio la risposta di Gandalf458 .
Usa il contenuto solo da B e mantieni l'ordine genitore corretto
Questa è la vera "loro versione per git merge -s ours
". Ha lo stesso contenuto dell'opzione precedente (ovvero solo quella di branchB
), ma l'ordine dei genitori è corretto, ovvero il primo genitore viene branchA
e il secondo da 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
Questa è la risposta di Paul Pladijs (senza richiedere una branca temporanea).