子树合并到分支:-s recursive -Xsubtree =?

时间:2016-07-30 04:26:29

标签: git

git book,"子树合并"中,它说:

  

您也可以执行相反的操作 - 在主分支的rack子目录中进行更改,然后将它们合并到您的rack_branch分支中,以便将它们提交给维护者或将其推送到上游。

这正是我想要做的。在简单的示例中它可以工作(另请参阅我对this question的回答),因此,如果我在rack master上进行更改并提交它们,我可以执行类似

的操作
git checkout rack_branch
git merge --squash -s recursive -Xsubtree master

并提交到rack_branch。但是在我的项目中,目录结构更加复杂,它不起作用。 Git没有找到正确的目录结构,并使用超级文件夹的整个结构填充分支rack(这是一个子目录)。

在我不起眼的新观点中,答案是使用-Xsubtree=PATH,因为那时(正如git-merge doc中所述):

  

...相反,指定的路径是前缀(或从头开始剥离),以使两棵树的形状匹配。

但是如何在此具体示例中指定正确的路径?它在目录树上升级,即

git merge --squash -s recursive -Xsubtree=.. master

这不起作用。我应该补充说-Xsubtree=rack(或者我的项目的等价物)也不起作用(即" strip"以及" prepend"策略都不起作用。感谢你你的帮助!

编辑:我偶然发现了this blog post,添加--no-ff选项似乎有效。也许有人可以解释为什么这是必要的?这有必要吗?提前致谢。

EDIT2:我是否正确理解--no-ff选项附加所有来自主分支的提交,即使那些与该子目录无关的提交?这不会是好事。有解决方法吗?

EDIT3:this可能重复。我现在意识到已经在几个小时前读过,但没有找到--no-ff标志。如果这个问题如此常见,那么--no-ff标志应该是-s recursive -Xsubtree=PATH的默认行为,特别是如果明确提供了PATH。

0 个答案:

没有答案