2011-08-10 21 views
6

我想将分支B的更改合并到我的分支A,合并排除对给定目录的任何更改。这里的问题是我有一些提交跨越多个目录的改变,其中一个需要被排除。合并git分支,同时排除对某些目录的更改

是否有这样的可能,例如,有历史重写?

为了澄清,我的目录结构是:

root/x 
root/y 
root/z 

一些提交的影响所有三个目录。现在,我想以这样一种方式合并,即我的历史记录已更改为yz,但不是x

回答

6

您可以合并其他分支而不提交它,然后重新设置该目录的状态:

git merge --no-commit <branch> 
git reset root/x 
git commit 

更好,但由@useless in his answer

+0

谢谢。最后一步是我想避免的。 Rebase看起来像是一件好事,但我有超过100次提交... –

+0

好吧,我的方法工作:)它创建了一个'邪恶的合并'虽然 – knittl

+0

在git中避免原子提交就像在淋浴中避免水。你可以自由地尝试它,但这不是该如何使用的东西,而且你将更加努力地工作。 –

3

如果您的更改全部仍在本地,则最简单的方法是将splitting your commits转换为真正正交的更改,您可以独立合并。


死链接修复:尝试this link代替(或只看到当地的联机帮助页git的变基),并搜索下来拆分提交

+0

提到如果我分裂提交分裂你的提交,我该怎么办将它们独立合并?我的意思是,在合并时,所有提交到所选提交被合并。我不太确定这种方式。相反,'--no-commit'方式很明显。 –