这可能是一个简单的问题(也许之前有人问过?),但我一直没能找到答案(我真的试过了,我不只是懒惰:))。
我在一个基于另一个分支的 git 分支上工作。但是,我不知道它基于哪个分支。
是否有命令或方法可以找出我当前的分支来自哪个分支?
我尝试查看 SourceTree 以及 git log --graph --all
但不知何故我无法真正找出分支创建时的起点。
谢谢!
最佳答案
一开始在 git 中确实没有这样的概念。
这也许最好通过例子来理解。考虑以下提交图片段:
o <-- branchA
/
o--o--o
\
o--o <-- branchB
这里,“显然”branchB
来自branchA
。但是等等,还有更多,我遗漏了一点:
o <-- branchA
/
o--o--o--o <-- branchC
\
o--o <-- branchB
现在,branchB
是从 branchA
还是从 branchC
出来?
最棘手的部分是这些分支中的任何一个都可以按任何顺序创建;1 此外,标签(分支名称)也可以移动或删除随时。2 因此,如果您决定 branchB
“基于”branchA
,但随后有人删除了branchA
完全,你剩下这个:
o--o--o--o <-- branchC
\
o--o <-- branchB
现在 branchB
显然是基于 branchC
,而不是 branchA
。
[编辑:如果您想确定两个分支首先“分开”的特定提交,请使用git merge-base
.找到该提交后,您可以使用 git branch --contains
查看其他哪些分支名称可能也很有趣,等等。这里的一般规则是,提交 图 是您真正拥有的全部:像分支名称这样的标签只有在您或其他人稍后更改它们之前才有效。标签标签通常应保留在原处,但即使那些可以移动,这通常也比较麻烦。]
1好吧,几乎所有:新提交的父提交必须存在才能创建子提交,除非您有办法破解 SHA-1 密码哈希。
2删除标签意味着通过从该标签开始并“向后”工作(向左,可能向上或向下,只要你继续向左移动)找到的提交这些图纸)变得“无法访问”,除非从其他标签开始找到它们。提交图中无法访问的提交最终会被 3 完全删除,但通常您有大约 30 天的时间来取回它们。
3这是通过 git 的“reflogs”实现的。每个 reflog 条目都像一个常规标签一样工作,使提交“可访问”并因此保留它。它实际上是过期的 reflog 条目。
关于git - 如何找出当前分支基于的 git 分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679856/