Как уберечь оба файла от конфликта слияния "оба добавлены"?
Я хочу объединить ветку, в которую добавлен файл, который я также добавил:
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
делает их по умолчанию сейчас - я это не тестировал).