Как исправить конфликт слияния из-за удаления файла в ветке?

Я создал ветвь dialog, и когда я попытаюсь объединить ее с веткой master. Есть 2 конфликта. Я не знаю, как разрешить CONFLICT (delete/modify). Не могли бы вы рассказать мне, что делать?

$ git checkout master
$ git merge dialog
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD. Version HEAD of res/layout/dialog_item.xml left in tree.
Auto-merging src/com/DialogAdapter.java
CONFLICT (content): Merge conflict in src/DialogAdapter.java
Automatic merge failed; fix conflicts and then commit the result.

Я открыл src/DialogAdapter.java, исправил конфликт и сделал git add src/DialogAdapter.java. Что еще мне нужно сделать?

Ответ 1

Сообщение о конфликте:

CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD

означает, что res/layout/dialog_item.xml был удален в ветки диалога, который вы объединяете, но был изменен в HEAD (в ветки, в которую вы объединяетесь).

Итак, вы должны решить,

  • удалите файл, используя "git rm res/layout/dialog_item.xml"

или

  • принять версию от HEAD (возможно, после ее редактирования) с помощью git add res/layout/dialog_item.xml "

Затем вы завершаете слияние с "git commit".

Обратите внимание, что git предупредит вас о том, что вы создаете комманду слияния в (редком) случае, когда это то, чего вы не хотите. Вероятно, остается от дней, когда указанный случай был менее редок.

Ответ 2

Обычно я запускаю git mergetool, и он подскажет мне, хочу ли я сохранить измененный файл или удалить его. Это самый быстрый способ IMHO, поскольку это одна команда вместо нескольких файлов.

Ответ 3

Если вы используете Git Gui для окон,

  • Прервать слияние
  • Убедитесь, что вы находитесь на своей целевой ветке.
  • Удалить конфликтующий файл из проводника
  • Повторить поиск изменений в Git Gui (F5)
  • Обратите внимание, что конфликтующий файл удален
  • Выберите смену с измененными файлами для фиксации (Ctrl-I) из меню Commit
  • Введите комментарий фиксации как "удаленный конфликтный файл"
  • Commit (ctrl-enter)
  • Теперь, если вы перезапустите слияние, он (надеюсь) будет работать.