我怎样才能找到我当前分支所基于的git分支?

Seb*_*ian 6 git branch

这可能是一个简单的问题(也许之前会问过?),但我找不到答案.(我真的尝试过,我不仅仅是懒惰:))

我正在开发一个基于另一个分支的git分支.但是,我不知道它基于哪个分支.

是否有命令或方法来找出我当前分支来自哪个分支?

我尝试查看SourceTree以及"git log --graph --all",但不知何故,我无法确定创建分支时的起始点.

谢谢!

tor*_*rek 7

首先,在git中确实没有这样的概念.

这可能是最好的例子.考虑以下提交图片段:

        o    <-- branchA
       /
o--o--o
    \
     o--o    <-- branchB
Run Code Online (Sandbox Code Playgroud)

在这里,"显然" branchB来自branchA.但等等,还有更多,我遗漏了一点:

        o    <-- branchA
       /
o--o--o--o   <-- branchC
    \
     o--o    <-- branchB
Run Code Online (Sandbox Code Playgroud)

现在,确实branchB脱落了branchA还是脱落了branchC

最棘手的部分是任何这些分支都可以按任何顺序创建; 1,此外,标签-分支名称-也可以移动或移除在任何时间.2 因此,如果您认为branchB"基于" branchA,但是有人branchA完全删除,那么您就是这样:

o--o--o--o   <-- branchC
    \
     o--o    <-- branchB
Run Code Online (Sandbox Code Playgroud)

而现在branchB显然是基于branchC,而不是branchA.

[ 编辑:如果你想识别两个分支首先"分开" 的特定提交,请使用git merge-base.找到提交后,您可以看到其他分支名称可能也有趣git branch --contains,等等.这里的一般规则是提交是你真正拥有的:分支名称之类的标签只有在你或其他人以后更改它们之前才有效.标签标签通常应保持原样,但即使是那些可以移动,通常更多的是疼痛.]


1好吧,几乎任何一个:新提交的父提交必须存在才能创建子提交,除非你有办法打破SHA-1加密哈希.

2删除标签意味着通过从该标签开始并向后工作(向左或向上或向上或向下以及向左移动)所发现的提交变得"无法到达",除非他们从其他标签开始发现.在提交-图不可达提交的最终3完全消除,但通常你有30天左右,让他们回来.

3这是通过git的"reflogs"实现的.每个reflog条目的工作方式类似于常规标签,以使提交"可达"并因此保留它.它实际上是过期的reflog条目.