如何找出分支的开始提交?

时间:2015-12-30 15:42:15

标签: git

来自版权控制与Git by Loeliger,2ed,

  

因为未明确识别启动分支的原始提交,   可以使用的名称在算法上找到提交(或其等效)   新分支分叉的原始分支:

git merge-base original-branch new-branch
  • 在存储库的图表表示中,分支是提交路径是否正确?

  • 如果查看存储库的图形,其分支名称指向每个分支的提示,但没有显示每个分支的开始提交,那么如何找到每个分支的开始提交?

2 个答案:

答案 0 :(得分:5)

  

如果查看存储库的图形,并将分支名称指向某些提交作为分支的提示,您如何找到每个分支的开始提交?

git log --graph --decorate

// To get the same display as in the image below add the --oneline as well
git log --graph --decorate --oneline

enter image description here

答案 1 :(得分:4)

  

在存储库的图表表示中,分支是提交路径是否正确?

也许。这取决于你的意思是什么?" branch"和"路径"这里。 (你的意思是图理论"路径"?如果是这样,可能"不"因为"路径"只是意味着任何非空的步行通过一些节点和边缘没有通过节点加倍;虽然现在我们需要知道你的意思" branch" ...)

  

如果查看存储库的图形,其分支名称指向每个分支的提示,但没有显示每个分支的开始提交,那么如何找到每个分支的开始提交?

总的来说,你不能。这是图表的一个片段:

            B - C
          /       \
... o - A           F - G    <-- br
          \       /
            D - E

&#34;开始提交&#34;分支br?它是B,还是A,还是早于A... - o链中)的内容? D和/或E来自哪个分支(如果有的话)?

如果有其他名称,他们可能会提供足够的猜测线索:

            B - C
          /       \
... o - A           F - G    <-- br
          \       /
            D - E            <-- newfeature

日志消息也可以提供线索;例如,F的日志消息可能会显示为merge branch newfeature into br。在这种情况下,可能D是&#34;开始提交&#34;对于分支newfeature以及提交F的人,在分支git merge newfeature上执行br。因此,br的来源可能在A之前。

Reflogs也可能提供这些线索。

但是,除了日志消息之外,任何其他线索都可能消失。合并newfeature后,我们可以删除名称(及其reflog);默认情况下,reflog条目在90天后过期(如果它们指向的对象无法从最末端的对象访问,则为30天)。

另一方面,同样的图表可能以不同的方式出现:

            B - C
          /       \
... o - A           F - G    <-- br
          \       /
            D - E            <-- origin/br

origin/br的起点可能与br的起点相同,合并F发生在有人做git merge时(可能是git pull)将他/她的工作与其他人的工作结合起来。两个用户都在自己的br分支机构上工作,共享一些存储库或存储库(可能是一个集中式服务器)。

当你发现自己要求&#34;分支X&#34;的第一次提交是什么时,git会鼓励你停止询问(或问自己&#34;我为什么关心?&#34;)。