望ましい結果が完全に明確ではないため、回答とコメントで「正しい」方法を実行することについて混乱が生じます。概要を説明し、次の3つのオプションを確認します。
マージしてみて、競合に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
これは、たとえばAlan W. Smithの回答が行うことです。
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
。これは例えばGandalf458の答えがすることです。
Bのコンテンツのみを使用し、正しい親の順序を維持する
これが本当の「彼らのバージョンgit merge -s ours
」です。以前のオプションと同じ内容(つまり、からのみbranchB
)ですが、親の順序は正しいです。つまり、最初の親はからbranchA
、2番目はから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
これはPaul Pladijsの答えです(一時的なブランチを必要としない)。