2012-08-16 50 views
5

我的Git仓库有两个文件,alphabeta,具有相同的内容。重订的Git合并后的困惑删除的文件

如果我删除我的主分支alpha,在我的特性分支进行编辑,然后当我合并掌握到的功能,我警告过冲突。假设我通过删除alpha来解决此问题。

如果我再使用git rebase master衍合我的特性分支上的主人,alpha被删除,但现在我要alpha就这一特性分支的更改应用到beta!我收到了冲突警告,但它很高兴地通过自动合并解决,但未提交被阻止供我审阅。

有趣的是,如果我做了git rebase -i并且只接受默认值,beta不会被编辑,我可以解决我在合并时解决的相同冲突。

三个相关的问题,那么:

  1. 为什么混帐认为我申请到一个文件中的变化应适用于另一个,当其他没有被任何提交编辑?
  2. 我该如何避免这种情况?
  3. 即使我采用默认选项,为什么交互式底座的行为会有所不同?

我Win7上运行的Git 1.7.9在Cygwin。我已经把transcript on pastebin显示该开始用git init一个空目录,如果任何人希望看到的细节为自己(我不是在这里张贴由于长度)。

回答

10

documentation for git-rebase

-m
--merge
使用融合策略,以变基。当使用递归(默认)合并策略时,这允许rebase知道上游端的重命名。

当一个文件被删除,Git会认为,在改名的候选人,并试图重订基期的补丁应用到相应的重命名的文件。这听起来似乎可能会对你的情况做出猜测。

可以使用-m选项来选择不同的合并策略。例如,resolve合并策略可以通过自动检测重命名来避免此问题(有关合并策略的详细信息,请参阅git-merge)。

+1

另一种可能的解决办法是用'recursive'战略的'重命名,threshold'选项玩。将其设置为“M100%”,应该用错误的猜测来解决问题。 – 2013-04-10 00:19:37

+0

谢谢@GabrielePetronella。这为我解决了它 – thehouse 2016-01-04 11:01:49