查找发布分支的合并提交

时间:2013-09-19 11:50:29

标签: git

使用以下git历史记录:

            f---g---h--- feature
           /         \
      c---e---i---j---k---l--- release
     /                     \
-a--b---d---m---n---o---p---q---[hundreds of commits]--- master

我有提交g的SHA。无论是功能还是发布都不再可用,我需要找到提交q,IE将发布分支合并到主服务器中。在不同问题(Find merge commit which include a specific commit)中的答案中,我只能找到提交k,其中功能分支被合并到发布分支中。我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果功能或发行分支具有唯一名称,您应该能够在q上找到master,通过搜索其唯一名称的合并提交(例如,使用gitk --merges然后输入Find字段中的一个术语,因为Git默认在合并提交消息中记录合并的分支名称。

否则,您可以在master上搜索g与类似于此脚本的脚本合并的第一个合并提交:

g=ad198bc
for i in $(git log --merges --reverse --format=%H); do
    revlist=$(git rev-list -1 $g --not $i)
    if [ $? -eq 0 ]; then
        if [ "$revlist" = "" ]; then
            echo "Merge commit $i has $g merged."
            exit
        fi
    fi
done

答案 1 :(得分:0)

假设您的Git历史与您所描述的完全一致:

            f---g---h--- feature
           /         \
      c---e---i---j---k---l--- release
     /                     \
-a--b---d---m---n---o---p---q---[hundreds of commits]--- master

然后,您可以通过检查q来找到git log的一种方式。使用

git log --oneline --graph

然后在less寻呼机输出中(我假设您使用less作为寻呼机),点击/然后输入g的sha ,然后会导致less搜索该帐号的git log输出。然后只需在输出中向上滚动一点,直到找到q

答案 2 :(得分:-1)

我会建议:

git log --merges --ancestry-path g..q

--merges仅记录合并提交,--ancestry-path仅将提交限制为g和q之间路径上的提交。在这种情况下,它应该显示k和q。