【发布时间】:2019-02-17 05:35:13
【问题描述】:
我有多个分支机构。分支 A,B,C.....J。我只想知道这些分支是如何起源的?
例如。我想知道 Branch C 起源于 terminal 的哪个分支?
【问题讨论】:
-
@BookOfZeus 这不是我所期望的。
标签: git terminal command-line-interface branch
我有多个分支机构。分支 A,B,C.....J。我只想知道这些分支是如何起源的?
例如。我想知道 Branch C 起源于 terminal 的哪个分支?
【问题讨论】:
标签: git terminal command-line-interface branch
分支在 git 中没有“父”分支。或者等效地,git 不会跟踪另一个分支是“从哪个分支创建的”。 (事实上,一个分支根本不必“从”另一个分支“创建”。)
分支关联的唯一方式是:它们共享多少历史。您有时可以推断出对 repo 分支的更结构化的理解,但通常这需要了解团队的意图。例如,如果您知道一个团队使用 gitflow 分支策略,那么您可以推断 feature 分支通常被认为有一个 development 分支作为其父分支,并且它具有 master 作为其父分支。但这就是人们对分支机构的看法; git 不知道也不在乎。
您可以使用git log --graph 或gitk 等UI 工具获得分支的可视化效果(为此我经常使用gitk --all)。但请注意,在这些工具中,将哪个分支“拉到一边”基本上是任意的。如果你看到像
A -- B -- C <--(branch1)
\
D -- E <--(branch2)
你可能会推断出branch2 是从branch1 创建的;但就 git 而言,假设branch1 是从branch2 创建的同样合理;我们真正知道的是他们有共同的历史(来自B)。
(如果分支已合并在一起,则合并提供了一些关于哪个分支可能是父分支的提示;但这仍然不是确定的,因为某些策略涉及从“父”分支合并到长期存在的“子”分支分支以及从“子”分支返回到“父”的最终合并。)
所以...对于您提出的问题,没有答案。知道这一点后,您可能需要回到您想要完成的工作,并想出另一种方法来完成它。
【讨论】:
(在 cmets 中澄清后问题的替代表述)
如何知道哪个分支是分支的“父”,它是从哪个分支从创建的?
这样说,这个问题充满了对 git 分支的误解。可以创建一个分支以指向任何提交,无论该提交实际上是否可以从任何分支访问。当您执行以下操作时:
git checkout master
git checkout -b new_branch
...您创建一个新分支,其中未明确给出<refspec>,因此假定为HEAD,解析为master,本身解析为特定提交。所以master 和new_branch 在这种情况下没有有任何特殊或有意义的关系。
【讨论】: