Есть ли способ объединить только подкаталог в 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!"
Другие вопросы по тегам