如何在合并分支分叉的地方提交

How to get commit where merged branch forked from

o---1---o---o---o---o     master
     \         /
      o---o---2           feature

是否可以在不使用 reflog 的情况下获得提交 1? 使用 git 2.4.2

我试过了:

git merge-base master feature
git merge-base feature master
returns: commit 2 
git merge-base --fork-point master feature
git merge-base --fork-point feature master
returns nothing ( exit code 1 )

不重复:

从这个问题中找到我的答案作为子集: (反向移植实际上也是我的用例!)

[alias]
    oldest-ancestor = !bash -c 'diff -u <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | sed -ne \"s/^ //p\" | head -1' -

我有点困惑,这不是 git 默认的一部分。您至少会期望这将是 merge-base--fork-point 选项的行为。如果有人知道 better/default 替代方案。请将其放在评论中或作为单独的答案!

如您所见,git merge-base 不会帮助您。这样做的原因是 featuremaster 历史的一部分,它可以被快速转发到 master

如果这是你的特定设置,你已经将 feature 合并到 master,并且 feature 分支仍然指向合并前的提交,那么你可以获取 master 中包含的所有提交,但 feature 未包含 的所有提交,并获取最后一个;您正在寻找的合并基础是它的父级。您可以通过指定范围 feature..master:

来做到这一点
git show $(git rev-list feature..master | tail -1)~1

这将在您的图表中显示合并基础提交“1”。

我认为以下内容符合您的要求:

git merge-base --fork-point master