Как сделать существующий subdir как поддерево для другого git repo, с squashed commit?

Сначала я ошибочно скопировал другой источник репо прямо в один более крупный проект в субдире. Исходное репо и субдир были изменены с тех пор. Теперь у меня есть знание git-поддерева, я хочу сделать subdir как реальное поддерево, чтобы я мог легко синхронизировать изменения с оригинальным репо.

Я попробовал «разделение git-поддерева», затем вытащил последний источник из оригинального репо, он просто сработал. Однако мне не нужна вся история, но «-squash» не работает для «split», вот мои команды

git subtree split -P xxx-dir --onto==1940032 git remote add xxx https://github.com.... git fetch xxx git subtree pull -P xxx-dir xxx master # the pull worked, but whole history of xxx was imported too. '--squash' didn't work for above 'pull' git subtree merge -P xxx-dir xxx/master --squash # Can't squash-merge: 'xxx-dir' was never added. 

Похоже, что сквош работает только для добавленного поддерева, но не для разделения.

Есть идеи? Благодарю.

Меня смутило git-поддерево и слияние поддерева git

это разные вещи, но, возможно, git-поддерево является своего рода оболочкой какого-либо git-поддерева слияния https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging

Это хороший ответ о различиях между ними:
В чем разница между объединением поддерева git и git-subtree

насколько я понял, что проще всего сделать то, что вы

1. удалите каталог xxx-dir и зафиксируйте изменение

 rm -r xxx-dir commit -am "xxx subtree" 

2. добавить поддерево

 git subtree add --prefix=xxx-dir --squash xxx master 

Недостатком является то, что это меняет основную историю репо с 3-мя коммитами:

  1. фиксация, которая удаляет xxx-dir
  2. фиксация, которая «импортирует» поддерево с его историей, раздавленной как одна фиксация
  3. фиксация, которая объединяет импортированное поддерево

Насколько я понял, это своего рода ограничение git-поддерева.

Кстати, это должен быть исходный код git-поддерева, может быть, кто-то более опытный, чем я, может его выкопать.

Чао!

Что касается:

 git subtree pull -P xxx-dir xxx master # the pull worked, but whole history of xxx was imported too. '--squash' didn't work for above 'pull' 

Кажется, вы не использовали –squash. Или вы пытаетесь сказать, что попробовали команду снова, а не так, как вы ее здесь написали, WITH –squash? git subtree pull --squash -P xxx-dir xxx master

… и относительно:

 git subtree merge -P xxx-dir xxx/master --squash # Can't squash-merge: 'xxx-dir' was never added. 

С какой веткой вы ее запускали? похоже, вы пытаетесь объединить изменения из той же ветви, которую вы проверили в свою подкаталоги. Поскольку команда не работает, она не может сливаться. Я не думаю, что это говорит о том, что сквош – это проблема, это просто то, что происходит слияние сквош-стиля, которое терпит неудачу.