2017-03-01 81 views

回答

0

你可以看到,有没有承诺不会合并所有分支,通过运行git branch --merged

这应该完成你想要的。新创建的没有提交的分支实际上与已合并的旧分支没有区别。

+0

*使用--merged时,只会将分支合并到指定的提交中(即,其提交提交可从指定提交中获得的分支)将被列出。* – RomanPerekhrest

+0

是的,该命令是我的出发点。然而,在我们的工作流程中,我们有一个没有任何反对的分支是非常常见的(所有功能分支都是如此开始的)。我想将这些分支与已合并回分支的分支分开。 –

0

这个问题的含义并不清楚。

这是一个简单的例子。假设我们画出这张图:

...--o--o--o--o <-- master 
     \ 
      o--X <-- br1, br2 

master指向它的提示提交。分支br1br2都指向他们自己的提交提交,但是这两个提交都是提交X。从这个意义上讲,这些分支名称中至少有一个是多余的。现在

,你说:我的遥控器上

分支被新创建

很容易找到远程跟踪分支名称:他们在refs/remotes/命名空间的人。名为origin的远程设备位于refs/remotes/origin/

然而,“新创建”在Git中并没有意义。分支名称可以随时创建或销毁,指向任何提交。鉴于迄今为止绘制的图形,我们可以在X之前添加指向提交的新br3。如果我们这样做的origin,然后运行git fetch,我们得到:

...--o--o--o--o <-- master 
     \ 
      o  <-- origin/br3 
      \ 
      X  <-- br1, br2 

这确实是相同提交图;我只是将X下移到一个新的行,以便我有足够的空间来符合名称origin/br3

这名 - origin/br3 -is,从某种意义上说,多余的我们自己的br1br2名字,因为它没有起到保留我们不会已经保留任何提交。但它的不同于我们有任何名字。

git branch选项--contains--merged--no-merged(今git for-each-ref可为好,因为Git的2.7.0)仅仅是EN-集体测试为“是或不是祖先”,对正是一些变化针对其他方面进行测试。让我们再回到这个图形,但加入了更多的名字:

...--U--V--Y--Z <-- master 
     \ 
      W--X <-- br1, br2 

图表告诉我们,U是每一个其他标记提交的祖先,YZ的祖先,WX的祖先,等等。WY祖先,然而,如提交节点只链接“向后” -leftwards,在这些图图中,所以W追溯到V,并Y追溯到V,但Y根本不连接到W所有。

对于这些“是祖先”的测试,提交总是被视为自己的祖先。 (也就是说,这些是小于或等于,≤测试,而不是严格小于)。

运行git branch --contains <id>提交方式:对于每个分支名称,查找其提示提交。 (这是Z,X,然后再X)。然后,看看是否提交<id>是提示的祖先。如果是这样,打印分支名称。因此,如果我们提交U,我们会得到所有分支名称,但如果我们提交X,我们只能得到br1br2

运行git branch --merged [<commit>]表示:对于每个分支名称,查找其提示提交。 (Z,XX)。然后,看看提示提交是否是我们刚刚提交的提交的祖先,或者如果我们没有提交提交,那么请参见HEAD。如果是这样,请打印该分支名称。所以,如果我们现在正在参与提交X,我们会看到br1br2。但是,如果我们提交U,我们得到没有分支名称,因为ZX不是U的祖先。

运行git branch --no-merged [<commit>]表示:对于每个分支名称,查找其提示提交。然后,查看提示提交是否是我们刚刚提交的提交的祖先,或者是否为HEAD。如果不是,则打印分支名称。

再次,这些都只是简单的“是祖先”的测试,而git branch只是运行它们的所有分支名称。该--contains--merged--no-merged控制:

  • 其呈交哈希走在≤祖先测试的左右两侧;和
  • “是”或“否”结果是否打印分支名称。

(有没有--does-not-contain测试把参数哈希ID左侧,但只打印如果测试说“不”。对于这一点,你必须手工拼出循环。)

相关问题