如何合并git中的子目录?
是否有可能只合并一个子目录的变化从本地git分支到远程git分支,还是“全部或全部”?
例如,我有:
branch-a
- content-1
- dir-1
- content-2
和
branch-b
- content-1
- dir-1
- `content-2
我只想合并branch-a dir-1的内容和branch-b dir-1的内容。
就像SO问题“如何将选择性文件与git-merge?合并?”的替代方法一样,我只是发现了这个GitHub线程,它可以更适合合并基于git读取树的整个子目录:
我的资源库=> cookbooks
我的资料库目标目录=> cookbooks/cassandra
远程存储库=> infochimps
远程存储库源我想合并到cookbooks/cassandra
=> infochimps/cookbooks/cassandra
以下是我用来合并它们的命令
git remote add -f infochimps git://github.com/infochimps/cluster_chef.git
git merge -s ours --no-commit infochimps/master
infochimps/cookbooks/cassandra
合并到cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
git commit -m 'merging in infochimps cassandra'
附录
这很奇怪,[编辑我] - 但read-tree
步骤可能会失败,如下所示:
error: Entry 'infochimps/cookbooks/cassandra/README' overlaps with 'cookbooks/cassandra/README'. Cannot bind.
...即使这两个文件都是相同的。 这可能有助于:
git rm -r cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
但是,当然,手动验证这是做你想做的。
对于我的例子,假设你有一个分支'源'和一个分支'目的地',它们都反映了它们自己的上游版本(或者不是,如果仅在本地),并且被拉到最新的代码。 比方说,我希望repo中的子目录叫做newFeature,它只存在于'source'分支中。
git checkout destination
git checkout source newFeature/
git commit -am "Merged the new feature from source to destination branch."
git pull --rebase
git push
大大减少了我见过的所有事情,这对我来说非常合适,在这里找到。
请注意,这不是“真正的合并”,因此您不会在目标分支中拥有有关newFeature的提交信息,只需修改该子目录中的文件即可。 但是,由于您大概会在晚些时候重新合并整个分支,或者放弃它,这可能不是问题。
我从Eclipse的论坛主题中获得了这一点,它的功能如同一种魅力:
git checkout source-branch
git checkout target-branch <directories-or-files-you-do-**NOT**-want>
git commit
git checkout target-branch
git merge source-branch
链接地址: http://www.djcxy.com/p/45037.html