我已将中继线分支到功能分支。为了使分支保持最新状态,我想经常从主干重新合并(始终是最新的),但是我不希望主干中的所有内容都合并到我的分支中。
是否可以通过某种方式从中继中仅合并分支中我拥有的文件?
例如,在合并之前:
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
答案 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
我个人会考虑更改您的工作流程。如果您对自己的情况有更多的了解,我们将能够帮助您找到其他解决方案。