У меня была git история, подобная этой:
master feature
v v
o----o-----o----o----o
Я извлек мастер, затем изменил и передал file.txt, который существовал в обеих ветках:
git checkout master
...altered file
git add file.txt
git commit -m "altered file.txt"
Итак, моя история выглядела так:
master
v
o----o---o feature
\ v
o----o----o
Затем я перенес функцию на мастер:
git checkout feature
git rebase master
Я подумал, что, поскольку я изменил только одну строку в одном файле, если есть В случае каких-либо конфликтов слияния они должны быть только с file.txt
. Вместо этого у меня было несколько мелких конфликтов, ни один из которых не был связан с file.txt
.
Пример сообщения об ошибке:
Falling back to patching base and 3-way merge...
error: The following untracked working tree files would be overwritten by merge:
path/to/DifferentFile.php
Please move or remove them before you merge.
Aborting
error: Failed to merge in the changes.
Patch failed at ab12 my commit message
hint: Use 'git am --show-current-patch' to see the failed patch
Что здесь произошло? Разве перебазирование просто не проигрывает все ваши коммиты на новом конце базовой ветви? Если ветки ранее были в одной линейной истории, как добавление одного файла и перебазирование могли создать конфликты слияния с несвязанными файлами?