262

後のリベースの最中です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 コマンドが欠けているのではないかと思います。

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

4

4 に答える 4

318

取得した競合ファイルごとに、指定できます

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すると、作業ツリー ファイルに加えられた変更を破棄して、元の競合したマージ結果を再作成できます。

于 2013-05-30T00:21:47.290 に答える
6

上記のコメントから@ user456814を引用:

git rebase -s recursive -X <ours/theirs>
また
git merge -s recursive -X <ours/theirs>

リベースの場合、「ours」と「irs」はマージ中とは逆になることに注意してください。

@ user456814 は、2014 年に承認された回答へのコメントでこの有用な回答を提供しました。コメントはその点で制限されているため、検索、評価、更新などを容易にするために、コミュニティ wiki としてここに表示しています。

于 2021-03-23T15:17:10.653 に答える