我找到了有关显示包含给定提交的所有分支的信息。但是,如何在我的遥控器上找到新创建的没有针对它们的提交的分支?
答案 0 :(得分:0)
通过运行git branch --merged
这应该可以实现你想要的。没有提交的新创建的分支与已合并的旧分支没有什么不同。
答案 1 :(得分:0)
我不清楚这个问题意味着什么。
这是一个简单的例子。假设我们绘制了这个图:
...--o--o--o--o <-- master
\
o--X <-- br1, br2
master
指向其提示。分支br1
和br2
都指向他们自己的提示提交,但两个提交都是提交X
。从这个意义上讲,这些分支名称中至少有一个是多余的。
现在,你说:
我的遥控器上新创建的分支
很容易找到远程跟踪分支名称:它们是refs/remotes/
命名空间中的名称。名为origin
的远程名称位于refs/remotes/origin/
。
&#34;然而,新创建的#34;在Git中没有意义。可以随时创建或销毁分支名称,指向任何提交。鉴于到目前为止绘制的图形,我们可以在br3
之前添加指向提交的新X
。如果我们在origin
上执行此操作,然后运行git fetch
,我们会:
...--o--o--o--o <-- master
\
o <-- origin/br3
\
X <-- br1, br2
这与提交图相同;我只是将X
向下移动到一个新行,以便我有足够的空间来填充名称origin/br3
。
在某种意义上,该名称 - origin/br3
- 对我们自己的br1
和br2
名称都是多余的,因为它不会用于保留我们不会保留的任何提交。但它的与我们拥有的任何名称不同。
git branch
选项--contains
,--merged
和--no-merged
(现在git for-each-ref
中也可用,因为Git 2.7.0)仅仅是对于&#34;的集体测试是或者不是祖先&#34;,在准确测试什么的其他方面有一些变化。回到此图表但添加更多名称:
...--U--V--Y--Z <-- master
\
W--X <-- br1, br2
图表告诉我们U
是所有其他标记提交的祖先,Y
是Z
的祖先,W
是X
的祖先}, 等等。 W
不是Y
的祖先,但是,由于提交节点仅链接&#34;向后&#34; -leftwards,在这些图形图中 - 所以{{1 }}返回W
,V
返回Y
,但V
根本不连接到Y
。
对于这些&#34;是一个祖先&#34;测试,提交始终被视为自身的祖先。 (也就是说,这些是小于或等于,≤,测试,而不是严格 - 小于。)
运行W
提交意味着:对于每个分支名称,查找其提示提交。 (那是git branch --contains <id>
,Z
,然后是X
。)然后,查看命名提交X
是否是提示的祖先。如果是,请打印分支名称。因此,如果我们命名commit <id>
,我们将获得所有分支名称,但如果我们将提交命名为U
,则我们只获得X
和br1
。
运行br2
表示:对于每个分支名称,请查找其提示提交。 (git branch --merged [<commit>]
,Z
和X
再次。)然后,查看提示提交是否是我们刚刚命名的提交的祖先,如果我们没有,则查看X
的祖先一个名字。如果是,请打印该分支名称。因此,如果我们现在正在提交HEAD
,我们会看到X
和br1
。但是,如果我们将提交命名为br2
,则会得到 no 分支名称,因为U
和Z
不是X
的祖先。
运行U
表示:对于每个分支名称,请查找其提示提交。然后,查看提示提交是否是我们刚刚命名的提交或git branch --no-merged [<commit>]
的祖先。如果不,请打印分支名称。
同样,这些都很简单&#34;是一个祖先&#34;测试,HEAD
只为所有分支名称运行它们。 git branch
,--contains
和--merged
控件:
(没有--no-merged
测试将参数hash-ID放在左侧,但只有在测试说&#34; no&#34;时打印。为此,你必须拼写手动退出循环。)