web-dev-qa-db-ja.com

Gitの競合「両方削除」

「両方削除」がマージされていないパスのステータスである理由がわかりません。

次の場合:

  • OldStandardがベースです
  • NewStandardはトランクの最後のコミットです
  • OldCustomはブランチ(OldStandardからのフォーク)であり、マスターにマージしようとします。

「両方削除」とマークされたファイルとの競合があるのはなぜですか?

NewStandardに1つのファイルが追加され、OldCustomに別のバージョンのファイルが追加されると、「両方追加」の競合を理解しています。

しかし、削除の場合、ファイルがNewStandardで削除され、OldCustomでも削除された場合、何が問題になりますか?同等の状態ですよね?

16
user3341592

この答え (重複として推奨)で述べたように:

branchAgit mv oldfile newstandardコミットがあり、branchBgit mv oldfile newcustomコミットがあると、「両方が削除された」ことがわかります。

その場合、customBranchstandardBranchにマージしようとすると、gitは3つのファイルの競合を報告します。

both deleted:  oldfile
added by them: newcustom
added by us:   newstandard

あらゆる紛争と同様に、最終的な選択はあなたの手にあります:

gitは、たぶんnewcustomnewstandardが一緒に住んでいるという事実に問題がある可能性があるという事実を強調するだけです最終的なコードバージョン、および多分これは、両方がoldfileのコピーとして作成されたという事実にリンクしている可能性があります。

あなたはそれを手動で修正します:

  • oldfileの削除が期待される結果である場合:git reset oldfile && git rm oldfile
  • newstandardを維持することが期待される結果である場合は、他のgit reset newcustom && git rm newcustomを削除します。
  • newstandardnewcustomの一部をマージする必要がある場合:手作業で編集するか、3者間マージツールを使用します:meld newstandard newstandard newcustom
  • など...
6
LeGEC