特定のファイル(「ours」、「mine」、「theirs」)の Git マージ戦略を選択する 質問する

特定のファイル(「ours」、「mine」、「theirs」)の Git マージ戦略を選択する 質問する

の後にリベース中ですgit pull --rebase。マージ競合のあるファイルがいくつかあります。特定のファイルに対して「彼ら」の変更または「自分」の変更を受け入れるにはどうすればよいですか?

$ git status
# Not currently on any branch.
# You are currently rebasing.
#   (fix conflicts and then run "git rebase --continue")
#   (use "git rebase --skip" to skip this patch)
#   (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:  CorrectlyMergedFile
#
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add <file>..." to mark resolution)
#
#       both modified: FileWhereIWantToAcceptTheirChanges
#       both modified: FileWhereIWantToAcceptMyChanges

通常、私はファイルまたはマージ ツールを開いて、すべての「彼ら」または「私」の変更を手動で受け入れます。ただし、便利な git コマンドが不足しているのではないかと思います。

また、どのファイルが競合に遭遇したか、また競合の内容が何であるかを確認した場合にのみ、各ファイルのマージ戦略を選択できることに注意してください。

ベストアンサー1

競合ファイルごとに、以下を指定できます。

git checkout --ours -- <paths>
# or
git checkout --theirs -- <paths>

からgit checkoutドキュメント

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

--ours
--theirs
インデックスからパスをチェックアウトするときは、マージされていないパスのステージ #2​​ ( ours) または #3 ( ) をチェックアウトします。theirs

前回のマージ失敗により、インデックスにはマージされていないエントリが含まれている場合があります。デフォルトでは、インデックスからそのようなエントリをチェックアウトしようとすると、チェックアウト操作は失敗し、何もチェックアウトされません。 を使用すると、これらのマージされていないエントリは無視されます。または-fを使用して、マージの特定の側からのコンテンツをインデックスからチェックアウトできます。を使用すると、作業ツリー ファイルに加えられた変更を破棄して、元の競合したマージ結果を再作成できます。--ours--theirs-m

おすすめ記事