1. ホーム
  2. ギット

[解決済み】特定のファイル(「私たちの」、「私の」、「彼らの」)に対する Git マージ戦略を選択する)

2022-04-04 08:38:41

質問

の後にリベースしている最中です。 git pull --rebase . マージが競合するファイルがいくつかあります。 特定のファイルについて、"they" の変更または "my" の変更を受け入れるにはどうしたらよいですか?

$ 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

通常、私はファイルやマージツールを開いて、すべての "their" または "my" 変更を手動で受け入れます。 しかし、私は便利なgitコマンドがないのではないかと思っています。

また、ファイルごとにマージ戦略を選択できるようになるのは、どのファイルがコンフリクトしているか、おそらく何がコンフリクトしているのかを確認したときだけであることに注意してください。

解決方法は?

取得した各コンフリクトファイルに対して

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 作業ツリーファイルへの変更は破棄され、元のコンフリクトしたマージ結果を再作成することができます。