我在 git 中有以下历史记录:
* 02e085a (master) readme update
| * 1d940da (HEAD -> b1) search.py
| | * 7aaa12d (b2) file2
| |/
| * 7be9db9 file1
|/
* 22601c0 initial commit
现在我在 b2 上,我想知道 b2 分支的地方 (7be9db9)。算法如下:
然而,如果我想对 b1 做同样的事情,我最终会在同一个位置 - 7be9db9。但我希望以 22601c0 结束,因为这是 b1 分支的点。历史就是这样创建的。
初始提交 从 master (b1) 分支并提交 file1 从 b1 (b2) 分支并提交 file2 结帐 b1 并提交 search.py
恐怕是git的设计方式,无法区分,commit 7be9db9 (file1) 是由b1还是b2创建的,我说的对吗?所以不能说b1的父节点是master还是b2?
感谢确认。
答案 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
合并。