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

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

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

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

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 делает их по умолчанию сейчас - я это не тестировал).

Другие вопросы по тегам