git - 如何找出当前分支基于的 git 分支?

标签 git branch

这可能是一个简单的问题(也许之前有人问过?),但我一直没能找到答案(我真的试过了,我不只是懒惰:))。

我在一个基于另一个分支的 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/

相关文章:

Git:处理子分支

git - .git 配置。如何保护?

mercurial - Capistrano、Mercurial 和分支机构

Git : How to delete all local branches (merged or not), 除了master和develop

svn - Tortoise SVN 合并两个分支

tfs - 从 checkout 的项目创建 TFS 2010 分支?

git - git + ssh>远程空,树和非裸机

git - Mercurial 中的分支是否和 Git 一样好用?

python - 我怎样才能用python git clone一个存储库,并获得克隆过程的进度?

git - 使用指定仓库中的 Git 分支动态填充 Jenkins Choice 参数