从 git 历史记录确定父分支/提交

时间:2021-03-12 08:07:45

标签: git git-branch git-history git-history-graph

我在 git 中有以下历史记录:

* 02e085a (master) readme update
| * 1d940da (HEAD -> b1) search.py
| | * 7aaa12d (b2) file2
| |/
| * 7be9db9 file1
|/
* 22601c0 initial commit

现在我在 b2 上,我想知道 b2 分支的地方 (7be9db9)。算法如下:

  1. 获取下一次提交
  2. 检查提交所属的分支
  3. 如果只有当前分支,继续 1. step else 4.step
  4. 提交属于多个分支,这肯定是我们分支的点

然而,如果我想对 b1 做同样的事情,我最终会在同一个位置 - 7be9db9。但我希望以 22601c0 结束,因为这是 b1 分支的点。历史就是这样创建的。

初始提交 从 master (b1) 分支并提交 file1 从 b1 (b2) 分支并提交 file2 结帐 b1 并提交 search.py​​

恐怕是git的设计方式,无法区分,commit 7be9db9 (file1) 是由b1还是b2创建的,我说的对吗?所以不能说b1的父节点是master还是b2?

感谢确认。

1 个答案:

答案 0 :(得分:4)

<块引用>

恐怕是git的设计方式,无法区分,commit 7be9db9 (file1) 是由b1还是b2创建的,我说的对吗?所以不能说b1的父节点是master还是b2?

正确,不可能知道 b1 是从 b2 分支出来的,还是 b2 从 b1 分支出来的。当 b2 从 b1 分支出来时,它们指向同一个提交并且拓扑相同。不存储引用的历史记录。

如果您的流程需要知道这一点,而我正在努力思考为什么,请选择其他流程。

您可以知道的是两个分支之间的公共合并基础,带有 git-merge-base。通常这是您想要的信息。例如,Github Pull Request 知道您要合并到哪个分支,并且它可以将所有提交与 base..branch 合并。

相关问题