Объединение веток после перемещения файлов в другой каталог
У меня есть две ветви, которые я пытаюсь объединить. В оригинальной ветке у меня есть несколько файлов, которые во 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