根据 git 历史确定父 branch/commit

Determine parent branch/commit from git history

我在 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的设计方式,无法区分提交7be9db9(file1)是由b1还是b2创建的,我说的对吗?所以不能说,b1的父级是master还是b2?

感谢确认。

I'm afraid the way git is designed, it's not possible to distinguish, whether commit 7be9db9 (file1) has been created by b1 or b2, am I correct? So it's not possible to say, whether the parent of b1 is master or b2?

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

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

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