Как исправить конфликт слияния из-за удаления файла в ветке?
Я создал ветвь 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)
- Теперь, если вы перезапустите слияние, он (надеюсь) будет работать.