Описание тега git-subtree
Поддеревья позволяют включать подпроекты в подкаталог основного проекта, при необходимости включая всю историю подпроекта.
Например, вы можете включить исходный код библиотеки в качестве подкаталога вашего приложения.
Поддеревья не следует путать с подмодулями, которые предназначены для той же задачи. В отличие от подмодулей, поддеревья не нуждаются в каких-либо специальных конструкциях (например, файлах.gitmodule или gitlinks) в вашем репозитории и не заставляют конечных пользователей вашего репозитория делать что-то особенное или понимать, как работают поддеревья. Поддерево - это просто подкаталог, который можно добавить, разветвить и объединить вместе с вашим проектом любым способом.
Их также не следует путать с использованием стратегии слияния поддеревьев. Основное отличие состоит в том, что, помимо объединения другого проекта в качестве подкаталога, вы также можете извлечь всю историю подкаталога из своего проекта и превратить его в отдельный проект. В отличие от стратегии слияния поддеревьев, вы можете переключаться между этими двумя операциями. Если автономная библиотека обновляется, вы можете автоматически объединить изменения в свой проект; если вы обновляете библиотеку внутри своего проекта, вы можете снова "разделить" изменения и снова объединить их в проект библиотеки.
Например, если библиотека, созданная для одного приложения, оказывается полезной в другом месте, вы можете извлечь всю ее историю и опубликовать ее как собственный репозиторий git, не смешивая случайно историю проекта вашего приложения.