Есть ли способ объединить только подкаталог в git?
У нас в проекте 2 каталога: backend
& frontend
. Мы работаем над той же функциональной веткой, назовем ееfeature-branch
, как FE, так и BE.
FE вносит изменения только в frontend
dir, БЫТЬ только для backend
реж.
Теперь хочу слиться master
к feature-branch
. Однако есть конфликты как в BE, так и в FE. Я инженер BE, поэтому не знаю, как разрешать конфликты FE. Есть ли способ объединить только изменения из каталога BE, отправить эти изменения, а затем попросить инженера FE объединить изменения FE?
пс feature-branch
это наша основная ветка. Мы создаем подотрасли из этого и направляем наши PR на этоfeature-branch
. Мы не нажимаем напрямую на эту ветку.
2 ответа
Если вы хотите выполнить слияние по частям, сделайте частичное слияние, а затем объедините их. Как вы хотите, чтобы ваша история смотреть потом до вас, единственное заявление Git заботится о для слияния является "это правильное слияние этих предков".
Самым мучительно правильным способом сделать это, вероятно, было бы выполнить оба частичных слияния самостоятельно,
Одно частичное слияние, не в функциональную ветку, только с серверной частью:
git checkout feature^0 # checkout the feature commit bare, this is a wip
git merge --no-commit master # merge master, with manual changes
resolve all the backend conflicts, then
git checkout @ -- frontend # restore untouched frontend directory
git commit -m "backend-only merge of branch 'master'"
git tag WIP/backend-master-merge
Затем сделайте это с помощью только внешнего интерфейса:
git checkout feature^0 # checkout the feature commit bare, this is a wip
git merge --no-commit master # merge master, with manual changes
resolve all the frontend conflicts, then
git checkout @ -- backend # restore untouched backend directory
git commit -m "frontend-only merge of branch 'master'"
git tag WIP/frontend-master-merge
а теперь объедините результаты:
git checkout feature
git merge WIP/{frontend,backend}-master-merge
чтобы в ветке функций не было ничего, что не могло пройти ваши интеграционные тесты. Вы можете получить более простую последовательность команд и более простую историю, выполнив одно из частичных слияний непосредственно в ветви функции, а затем слияние другого частичного результата.
Сделайте слияние, затем проверьте желаемый каталог
git merge --no-commit FE
git checkout HEAD PATH_TO_FRONT_END
git add FILES
git commit -m "Just BE changes!"