我有一个包含30个文件的存储库A
,并将第二个存储库B
添加为remote
。此存储库有120个文件,但repo A
中的30个文件也包含在此处。
如何将B
合并到A
但仅合并现有的(30)文件?
我尝试从Repo B
合并整个分支,但后来我修改了30个文件,另外90个作为新文件。
我使用Sourcetree
客户端,也许这是一个针对此案例的功能。
答案 0 :(得分:1)
听起来这些repos有一些共同的历史,或者你已经确定了如何处理它,以便你的30个文件正确合并 - 所以你只需要保持其他90个文件不被添加到目标分支......
这里有一个警告[1],但有一种方法可以做到:
git checkout repo_a_branch
git merge --no-commit repo_b_branch
暂定合并结果现在暂存但尚未提交,因此您可以对其进行修改。如果90个文件很容易通过路径或glob来识别,以区别于30个文件,那么
git rm path-or-glob-of-unwanted-files
然后commit
。
如果这些文件混乱的方式会使这种情况变得困难,你可以做这样的事情
git status --porcelain |grep ^A |cut -d ' ' -f3 |xargs git rm -f
删除不需要的文件后,您可以commit
完成合并。
[1]如果你有
x -- x -- x <--(repo_b_branch)
...
x -- x -- x <--(repo_a_branch)
你找到了一些创建
的解决方案 x -- x -- x <--(repo_b_branch)
... \
x -- x -- x -- M <--(repo_a_branch)
其中M
仍然只有30个文件,然后M
似乎正在删除 90个“其他”文件。因此,如果您将来尝试从repo_a_branch
合并到repo_b
,那么您将处理那些从合并中取出的文件。
更一般地说,你在这里所拥有的有时被称为“邪恶合并”,因为它“隐藏”相对于默认合并结果的变化。特别是在默认合并成功完成的情况下,如果您运行某些假定默认合并的命令,这可能会导致麻烦。
这适用于上述解决方案,也适用于生成此提交图的任何其他解决方案,同时仅保留repo a中的30个文件。