Подтвердить что ты не робот

Разрешить "CONFLICT (удалить/изменить)" в git

В одной ветки в одной ветки A файл изменяется, и изменение завершается. Теперь в другой ветке B тот же самый файл редактируется и переименовывается.

При объединении B в git правильно распознает конфликт (CONFLICT (удаление/изменение)), и оба файла находятся в рабочем каталоге.

Если я знаю, что хочу иметь оба изменения в одном файле, как мне сделать это лучше всего?

Существует файл git merge-file, который - если я прав - ожидаю как файлы, так и общий предок. Но как дать последний? Как я могу сказать "использовать $path из $commit" или что-то в этом роде?

Пример:

mkdir git-rename-repo
cd git-rename-repo
git init

echo "First line" > afile

git add .
git commit -m "First commit in master"
git checkout -b mybranch

echo "Second line in mybranch" >> afile
git mv afile bfile

git commit -a -m "change and rename in mybranch"
git checkout master

echo "Changed first line in master" > afile

git commit -a -m "changed afile"
git merge mybranch

Теперь мне нужен файл с именем "bfile" с двумя изменениями:

Changed first line in master Second line in mybranch

Спасибо

4b9b3361

Ответ 1

В моем случае это был удаленный файл, отсутствующий в репозитории

CONFLICT (delete/modify): ERD.pdf deleted in HEAD and ... 

Мне просто нужно сделать: git rm ERD.pdf

Надеюсь, что это поможет.

Ответ 2

У меня также был сценарий

** CONFLICT (изменить/удалить): *** FileName удалено в HEAD и изменено в 6efb2a94ba0601aa1ec5050ab222a0359ee8379a. Версии 6efb2a94ba0601aa1ec5050ab222a0359ee8379a из FileName, оставленной в дереве. *

Я тоже был в замешательстве и дошел до этой должности. Но при вводе git status все сомнения исчезли. git status, сообщалось следующее о конфликтующих файлах:

Неподвижные пути:
(используйте "git add/rm...", чтобы пометить разрешение)

Итак, я просто сделал git rm FileName, и после этого CONFLICT был разрешен.

Ответ 3

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

Если я изменяю одну строку файла с двумя маленькими строками, относительное изменение очень велико.


Конечно, я мог бы сделать что-то вроде

git show HEAD^:afile > afile_ancestor
kdiff3 -m afile_ancestor afile bfile

P.S.: Извините за разбитое форматирование выше. Я не включил JavaScript, поэтому я не видел предварительного просмотра.