Итак, я использовал git -subtree, чтобы иметь разные ветки repoB в подкаталогах repoA, например
git clone repoA
cd repoA
// some commits to repoA here
git subtree add --prefix=src/dirA repoB branchA
Я сделал несколько коммитов в repoA, используя
git subtree push --prefix=src/dirA repoB branchA
Спустя некоторое время я совершил что-то для repoB/branchA из другого repoC, где добавлен branchA с помощью git -subtree.
Теперь я пытаюсь
git subtree pull --prefix=src/dirA repoB branchA
Однако я получаю конфликт слияния без всякой видимой причины. Изменения просты и не конфликтуют вообще - как это подтверждено патчем.
Я не уверен, как исправить эту ошибку. Я уже нашел two четыре других потока, которые касаются одной и той же/подобной проблемы:
- git -выходные осложнения
- git поддерево pull -P any <repo> < & иое GT; всегда объединяют конфликты
- git -subtree конфликт при выводе из центрального репо
- git Subtree Слияние конфликтов отчетов при слиянии простого восходящего изменения (это касается стратегии слияния поддерева, см. ниже).
Я не уверен, что это связано с разными SHA-1, поскольку я не переустанавливал свои коммиты и не редактировал их; ссылки с 1 по 3.
Моя проблема больше похожа на ссылку 4, где git волшебно не делает простого слияния. Однако ссылка 3 говорит о стратегии слияния поддерева, а не git -subtree, в частности, поэтому я не уверен, что это применимо вообще в моей ситуации.
Ситуация выглядит одинаково:
<<<<<<< HEAD
=======
// changes from commit I try to pull from repoB/branchA
>>>>>>> {commit SHA-1 from commit I try to pull from repoB/branchA}
Итак, я заметил, что BASE вопиюще неверна в трехстороннем окне слияния (kdiff3). Однако, если это так, почему git не пытается применить все предыдущие коммиты с базы? Выдача
git log --oneline
после неудачного слияния, но перед слиянием/попыткой слияния не происходит дублирования коммитов до оскорбительного фиксации. Версия файла, который отображается как BASE, является файлом, как это было, когда я впервые выпустил
git subtree add --prefix=src/dirA repoB branchA
внутри repoA.
Итак, что происходит? Похоже, что это связано с тем, что поддерево git не может найти мои коммиты по какой-то причине, но не пытается применить фиксацию от BASE к HEAD ~ 1, но только коммит, который я действительно отсутствую, HEAD.
Как я могу исправить эту ошибку, не прикручивая историю репозитория? Почему не может git вытащить эту простую фиксацию и вместо этого считает, что это конфликт слияния?
Любое понимание будет оценено по достоинству.