git部分合并,不是整个分支
我已经阅读了Git中合并的一些技巧:合并公共和私人分支,同时保持分支和其他分支完整的某些文件,但没有find解决scheme。
在我的情况下,我觉得需要做相反的合并策略。 在并行开发中,我必须在任意分支上保留一些相同的文件。 从另一方面来说,我不想做压缩或不压缩合并,而差异是显着的,可以打破目前的testing分支状态。
我想要什么东西
git checkout testing
git merge config.xml -b development
或git 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>)