git部分合并,不是整个分支

我已经阅读了Git中合并的一些技巧:合并公共和私人分支,同时保持分支和其他分支完整的某些文件,但没有find解决scheme。

在我的情况下,我觉得需要做相反的合并策略。 在并行开发中,我必须在任意分支上保留一些相同的文件。 从另一方面来说,我不想做压缩或不压缩合并,而差异是显着的,可以打破目前的testing分支状态。

我想要什么东西

git checkout testing

git merge config.xml -b developmentgit merge config\*.xml -b development

我想这就像git merge-files ...命令,但从分支交付的第二个文件,而不是从文件系统。 可能吗? 或者可能有一种解决方法? 子模块? 属性?

谢谢

有几件事你可以做。

一个,你可以select你想要的更改,只应用一个提交。 例如,如果有一个更改只触及config.xml ,您可以select它

 $ git cherry-pick $COMMIT_ID_YOU_WANT 

你也可以从开发分支抓取config.xml

 $ git checkout testing $ git checkout development -- config.xml 

这会得到与开发分支中存在的config.xml版本相同的版本,但请注意,它不会引入文件更改的历史logging。

基本上你都可以在这里阅读: http : //www.gelato.unsw.edu.au/archives/git/0701/37964.html

简而言之,如果你只是想应用一定范围的提交(这也可以只是一个提交)所做的更改,只对一部分文件进行:

 git diff commit1..commit2 filepattern | git apply --index && git commit 

可以合并从git树直接挑选的文件。
我build议做的是这样的:
$ git ls-tree development -- config.xml
$ git show <blob-hash> > config.xml.development

然后得到共同的基础:

$ git ls-tree $(git merge-base HEAD development) -- config.xml
$ git show <blob-hash> > config.xml.base

最后:

$ git merge-file config.xml config.xml.base config.xml.development

虽然我没有testing。

有了像zsh这样的shell,你可以避免将blob保存到临时文件中:

$ git merge-file config.xml =(git show <base-blob-hash>) =(git show <dev-blob-hash>)