2010-10-22 72 views
4

我有一个拥有主分支和稳定分支的项目 - 分支早已分歧。现在我在stable分支上有了一些提交,我也希望在master分支上有一个bug(一个bug修复)。我无法合并,因为分支发散,有大量未合并的更改 - 我只想要4次提交。对分散的GIT分支应用相同的更改

所以我尝试樱桃采摘。但是,由于顶级模块名称从“项目模块”方案更改为“模块”,因此失败。当采摘樱桃时,GIT在旧目录中创建新文件(如在旧分支上):未检测到重命名。这可能是因为我得到这样的警告:

warning: too many files (created: 278 deleted: 5364), skipping inexact rename detection 

我尝试git的格式补丁+ git am的,但是这一次会在旧目录中的文件。

如何将提交应用到主分支?

感谢, 亚当

回答

3

我怀疑你可以把它的工作(但需要较长时间)通过改变merge.renameLimit值:

merge.renameLimit

文件的数量在合并期间考虑何时执行重命名检测;如果未指定,则默认为diff.renameLimit的值。

我相当肯定樱桃挑选也会尊重这个价值。如果没有,可以找到两个分支的共同祖先,在那里应用提交,然后将它们合并到两个分支中,以确保它使用合并机器。 (请注意,这实际上是我首先推荐的做法,合并比挑选樱桃更合适,因为它们不会创建重复的提交,并且它们保留历史流。)

+0

我停止得到错误,但是樱桃挑选仍旧创建旧分支中的目录,而不是修补新分支中的文件。 我想我需要一种方法来应用一些提交,做一些路径转换......除了git format-patch +旧的UNIX补丁-n之外的任何其他方式? 感谢您与共同的祖先提示,我会在下次尝试。虽然在这里我合并了一个拉取请求,所以我没有太多的控制权什么是父... – adamw 2010-10-22 13:25:30

+0

嗯,是的,我可能会回到“手动”(即'sed')补丁编辑。你应该仍然使用'git apply',而不是'patch'。它支持git对补丁格式所做的所有扩展。 – Cascabel 2010-10-22 13:58:22

+0

@adamw:我只是注意到在git.git中提交:[merge-recursive:选项来指定重命名阈值](http://git.kernel.org/?p=git​​/git.git;a=commit; h = 10ae7526bebb505ddddba01f76ec97d5f7b5e0e5) - 有可能你的文件不在阈值范围内,你可以通过使它更加宽松地按你想要的方式工作。 (假设你还没有手动完成)。 – Cascabel 2010-10-27 14:14:57