从主干合并到分支,但仅合并分支中的文件

Merge from trunk to branch but only files in the branch

我已经从主干分支到功能分支。为了让我的分支保持最新,我想经常从主干合并回来(总是最新的),但我不喜欢主干中的所有东西都合并到我的分支中。

是否可以以某种方式仅从主干合并我在分支中的文件?

例如,合并前:

Trunk
  File 1
  File 2
  File 3
  File 4
Branch
  File 2
  File 3

合并后,我有以下内容,我不想要。我只想从主干中合并文件 2 和文件 3。

Branch
  File 1
  File 2
  File 3
  File 4
git merge --no-commit --no-ff trunk
git diff --name-only -z --diff-filter=A @ | xargs -0 git rm -f
git commit

增强@jthill 的方法,我会做

git merge --no-commit --no-ff trunk
git diff --name-only -z --diff-filter=A @ | xargs -0 git rm -f
rm .git/MERGE_*
git commit

这会让 git 忘记它正在进行合并,并且会在您最终想要合并回您的主干时阻止文件被删除。

但作为评论,这不是一个非常可持续的工作流程,即使您编写自己的脚本每次都自动执行此操作。值得问一下为什么您觉得需要这样做。

可能是: - repo 太大了 - 那么你应该考虑拆分代码 - 你的工作在逻辑上是分开的 - 那么你绝对应该考虑拆分代码 - trunk 中有损坏的工作 -- 那么你应该实施一个新的工作流程,不会将损坏的代码合并到 trunk

如果您不想修改您的工作流程,替代解决方案是:

如果您想完全覆盖更改

git checkout trunk -- *
git commit

如果你想完全覆盖某些文件

git checkout trunk -- file2
git commit

或者,交互式变基使您可以选择仅 select 您想要的通信。这也不会导致文件稍后被删除

git rebase -i trunk

就我个人而言,我会考虑更改您的工作流程。如果您有更多关于您的情况的信息,我们将能够帮助您找到其他解决方案。