Объединение веток после перемещения файлов в другой каталог

У меня есть две ветви, которые я пытаюсь объединить. В оригинальной ветке у меня есть несколько файлов, которые во 2-й ветке были перенесены в другое место. проблема в том, что когда я пытаюсь объединиться с исходной веткой, он не применяет изменения к новому расположению файла, даже если он обнаружил, что я переместил файлы с git move,

Я создал следующий сценарий, чтобы лучше объяснить мою проблему:

У меня есть филиал a с файлами a/1.txt, a/2.txt, в ветке b я сделал git mv в 1.txt а также 2.txt из каталога a в b,

дальше.. в ветке a Я модифицировал a/1.txtв филиале b когда я пытаюсь слить ветку a в это он пытается создать a/1.txt вместо применения изменения в местоположении нового файла (в каталоге b).

как мне решить эту проблему?

1 ответ

Решение

Я привел небольшой пример, который, скорее всего, показывает вашу проблему:

mkdir test
cd test/
git init
echo -e '1\n2\n3' >foo
git add foo
git commit -m foo
git checkout -b bar
echo -e '1\n4\n5' >bar
rm foo
git add --all .
git commit -m bar
git checkout -
echo -e '6\n2\n3' >foo
git add foo
git commit -m foo2
git merge bar

Теперь вы получаете сообщение об ошибке

# CONFLICT (modify/delete): foo deleted in bar and modified in HEAD. Version HEAD of foo left in tree.
# Automatic merge failed; fix conflicts and then commit the result.

Если вместо этого вы уменьшите уровень сходства, что необходимо для идентификации переименования с -X find-renames=30% (сходство составило 33%, так как одна из трех строк была одинаковой), слияние работает лучше:

git merge --abort
git merge bar -X find-renames=30%
git mergetool
git commit --no-edit
Другие вопросы по тегам