Разрешить "Конфликт (удалить / изменить)" в git - PullRequest
30 голосов
/ 23 февраля 2010

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

Когда слияние B с A 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

Спасибо

Ответы [ 3 ]

13 голосов
/ 03 августа 2011

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

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

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

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

9 голосов
/ 10 ноября 2015

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

** КОНФЛИКТ (изменить / удалить): *** FileName удалено в HEAD и изменено в 6efb2a94ba0601aa1ec5050ab222a0359ee8379a. Версия 6efb2a94ba0601aa1ec5050ab222a0359ee8379a FileName оставлена ​​в дереве. *

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

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

Так что я просто сделал git rm FileName, и после этого КОНФЛИКТ был разрешен.

2 голосов
/ 23 февраля 2010

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

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


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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...