git - 有没有办法在git中只 merge 一个子目录?

标签 git git-merge git-merge-conflict

我们在项目中有 2 个目录:backendfrontend。我们在同一个功能分支上工作,我们称它为 feature-branch,FE 和 BE。

FE 仅对 frontend 目录添加更改,BE 仅对 backend 目录添加更改。

现在我想 merge masterfeature-branch。但是,BE 和 FE 都存在冲突。我是BE工程师,所以我不知道如何解决FE冲突。有没有办法只 merge 来自 BE 目录的更改,推送这些更改,然后让 FE 工程师 merge FE 更改?

附注feature-branch 是我们的主要功能分支。我们正在从那个分支创建子分支,并将我们的 PR 指向那个 feature-branch。我们不会直接推送到那个分支。

最佳答案

如果您想分部分进行 merge ,先进行部分 merge ,然后再 merge 。您希望您的历史之后如何看取决于您,Git 唯一关心 merge 的声明是“这是这些祖先的正确 merge ”。

最令人痛苦的正确方法可能是自己进行两个部分 merge ,

部分 merge ,不 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 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

现在 merge 结果:

git checkout feature
git merge WIP/{frontend,backend}-master-merge

这样功能分支上就不会出现无法通过集成测试的内容。通过直接在功能分支上执行其中一个部分 merge ,然后再 merge 另一个部分结果,您可以获得更简单的命令序列和更简单的历史记录。

关于git - 有没有办法在git中只 merge 一个子目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892563/

相关文章:

ruby-on-rails - git:在使用子模块时如何将更改很好地返回到 master

git - Cherry-pick merge 提交失败,提交为空

Git merge 策略 : spaces make default shows no conflict and bring unexpected results

git - 如何删除 Git 冲突分支

git - 通过 Git 管理永远不会提交的文件

git - ssh github 有效,但 git push 无效。

git - 为特定文件选择 Git merge 策略 ("ours", "mine", "theirs")

git - 用黑色重新格式化整个 python 代码库后解决 git 冲突的最佳方法是什么?

git - 在 git rebase 期间自动忽略日期

git - 拒绝不是 merge 提交的提交