Git конфликт "оба удалены"

Я не понимаю, почему "оба удалены" являются статусом для несвязанных путей.

Если:

  • OldStandard является базой
  • NewStandard - последняя фиксация на внешней линии
  • OldCustom - это ветка (fork from OldStandard), которую мы пытаемся объединить в master

Почему существует конфликт с некоторыми файлами, помеченными как "оба удаленных"?

Я понимаю конфликт для "обоих добавленных", когда один файл добавляется в NewStandard, а другая версия файла добавляется в OldCustom.

Но, для удаления, какая проблема, если файл был удален в NewStandard, а также удален в OldCustom? Что эквивалентное состояние, нет?

Ответ 1

Как указано в этом ответе (предлагается в двух экземплярах):

вы можете увидеть "оба удалены", когда branchA имеет коммит git mv oldfile newstandard, а branchB имеет коммит git mv oldfile newcustom.

В этом случае при попытке объединить customBranch с standardBranch, git сообщит о конфликте трех файлов:

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

Как и любой конфликт, окончательный выбор остается в ваших руках:

git просто подчеркивает тот факт, что, возможно, может быть проблема в том факте, что newcustom и newstandard живут вместе в вашей окончательной версии кода, и, возможно, это может быть связано с тем, что оба они были созданы, будучи копией из oldfile.

Вы можете исправить это вручную:

  • если удаление oldfile является ожидаемым результатом: git reset oldfile && git rm oldfile,
  • если сохранение newstandard является ожидаемым результатом, удалите другое: git reset newcustom && git rm newcustom,
  • если некоторые части newstandard и newcustom должны быть объединены: отредактируйте их вручную или используйте инструмент трехстороннего объединения: meld newstandard newstandard newcustom
  • и т.д...