2017-07-03 17 views
3

「両方が削除されました」という理由が、結合されていないパスのステータスであるとはわかりません。Git conflict "both deleted"

場合:

  • OldStandardがベースである
  • NewStandardは
  • OldCustomは(OldStandardからフォーク)私たちはマスターに戻ってマージしようと支店で最後がトランクにコミットされ

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

1つのファイルがNewStandardで追加され、別のバージョンのファイルがOldCustomで追加されると、「両方の追加」の競合がわかります。

しかし、削除の場合、ファイルがNewStandardで削除され、OldCustomで削除されていると、何が問題になりますか?それは同等の状態です、そうではありませんか?

+1

Gitはコミットハッシュを削除に関連付ける必要があります。どのコミットで削除の所有権を取得する必要がありますか? – Tom

+0

[複製Gitのマージ競合:DD](https://stackoverflow.com/questions/43702944/reproducing-git-merge-conflict-dd)の可能な複製 – LeGEC

答えて

2

私は(私は重複として提案)答えhereが見つかりました:

どうやら、あなたはbranchAgit mv oldfile newstandardコミットがある場合「の両方が削除された」、とbranchBgit mv oldfile newcustomコミット持っているを見ることができます。 standardBranchcustomBranchをマージしようとしたとき、その場合には

git 3つのファイルに競合を報告します:矛盾のよう

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

、最終的な選択はあなたの手の中に存在する:

gitは、がおそらくという事実を強調しているだけです。newcustomnewstandardは最終コードバージョンで一緒に暮らしており、はおそらくです。これは、両方ともoldfileのコピーで作成されたという事実にリンクすることができます。

手動でこれを修正するために得る:

  • oldfileを除去することが期待される結果である場合:newstandardを維持することは、他のを削除し、期待される成果である場合
  • git reset oldfile && git rm oldfilegit reset newcustom && git rm newcustom
  • いくつかの部分であればnewstandardnewcustomをマージする必要があります。手で編集するか、3方向マージツールを使用してください。meld newstandard newstandard newcustom
  • など
+0

どのように保つべきものを決定するのですか?削除を受け入れるのは理にかなっており、マージを終了するときには 'newcustom'か' newstandard'のどちらかです。しかし、2つのファイルの間で選択をしなければならないことは、どうすればわかりますか(何百もの競合がある場合)? 'git mergetool'を使ってここで助けになるのではないですか? – user3341592

+0

@ user3341592:あなたは正しいですが、 'mergetool'は1つのファイルに"両方の変更 "の衝突を解決する場合にのみ"正しい "3方向マージを表示します。 – LeGEC

関連する問題