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

时间:2020-03-26 10:15:56

标签: git merge branch git-merge git-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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

扩大@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忘记它正在进行合并,并且当您最终想要合并回主干时将阻止文件被删除。

尽管如此,这并不是一个非常可持续的工作流程,即使您编写自己的脚本来每次都自动执行此操作。值得提出一个问题,为什么您觉得自己需要这样做。

可能是: -存储库太大-那么您应该考虑拆分代码 -您的工作在逻辑上是分开的-那么您绝对应该考虑拆分代码 -中继中有坏的工作-那么您应该实施一个新的工作流,该工作流不会将破坏的代码合并到中继中

如果您不想修改工作流程,则可以选择以下替代方案:

如果您想完全覆盖更改

git checkout trunk -- *
git commit

如果您想完全覆盖一些文件

git checkout trunk -- file2
git commit

或者,交互式变基使您可以选择仅选择所需的commts。这也不会导致文件稍后被删除

git rebase -i trunk

我个人会考虑更改您的工作流程。如果您对自己的情况有更多的了解,我们将能够帮助您找到其他解决方案。

相关问题