Ответ 1
Вы можете разделить изменения на уровень поддерева, а затем объединить с другой ветвью:
# from your foo project
git subtree split --prefix=dirA/dirB/ --branch=temp-branch [--onto=<onto-sub-note1>] [<commit-sub-note2>]
на заметку 1. Похоже, что, поскольку проект bar вообще существует, вы должны были скопировать его в какой-то момент времени и запустить его как новую библиотеку, и в этом случае, если вы хотите, чтобы все изменения были сделаны после этого, вы должны указать этот идентификатор фиксации штриха, когда были внесены изменения.
фиксация подзаголовка 2. Затем вы хотите указать идентификатор фиксации, который использовался при первом копировании подпроекта, чтобы вы только получали изменения с тех пор слиться с копией бара, который у вас уже есть (это будет поддерживать историю того, что вы пропустили). Используйте такой синтаксис, чтобы включить сам код фиксации до последнего: 0abc210^..
Вы также можете использовать --rejoin
, чтобы сделать фиксацию обратно в свой проект foo, что упростит последующие изменения, если вы хотите продолжить разработку на панели с помощью вашего проекта foo. Возвращение в foo является беспредметным, кроме как помочь базе данных поддерева, в которой он сплит будет легче сменяться в будущем.
После запуска команды split вы будете в ветки foo, в котором есть только те файлы. Оттуда вы можете выполнить нормальное слияние с проектом вашего бара или начать новый проект и объединить панель в это (поскольку он, вероятно, не имеет правильной истории). Вы можете захотеть переустановить точку расхождения или что-то еще, прежде чем пытаться сделать это слияние.
Edit: Также здесь ссылка для git команд поддерева