Как уберечь оба файла от конфликта слияния «оба добавлены»?

Я хочу объединить ветку, которая добавила файл, который я также добавил:

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both added:      file

Я хочу разрешить этот конфликт, переименовав свою версию file в other_file, сохранив при этом версию другой ветки.

Мое решение было бы:

git checkout --ours file
mv file other_file
git checkout --theirs file
git add file other_file

Есть ли более простое или более прямое решение?


person ipsec    schedule 15.11.2019    source источник


Ответы (1)


Я воссоздал такой конфликт:

$ git merge b1
CONFLICT (add/add): Merge conflict in newfile
Auto-merging newfile
Automatic merge failed; fix conflicts and then commit the result.

и действительно, Git пытается объединить файлы в рабочем дереве:

$ cat newfile   
<<<<<<< HEAD
different contents - add a file
||||||| merged common ancestors
=======
add a file
>>>>>>> b1

Ваш метод будет работать нормально. Этот ненамного короче и имеет потенциальные сбои с конечными модификациями в зависимости от вашего года выпуска Git:

$ git show :2:newfile > other_file   # extract --ours version, to new name
$ git checkout --theirs newfile
Updated 1 path from the index
$ git add newfile other_file
$ it status -s
M  newfile
A  other_file

Как показывает (короткое) status, два файла теперь готовы к фиксации. Их содержание:

$ cat newfile
add a file
$ cat other_file
different contents - add a file

Обратите внимание, что git show не запускает фильтры размытия и не выполняет конечные преобразования, по крайней мере, в более старых версиях Git (Git приобрел возможность выполнять преобразования текста, и, возможно, git show теперь делает это по умолчанию — я не проверял это ).

person torek    schedule 15.11.2019