4

使用以下 git 历史记录:

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

我有 commit 的 SHA g。功能和发布都不再可用,我需要找到 commit q,即发布分支合并到 master 的 IE。使用不同问题的答案(查找包含特定提交的合并提交)我只能找到提交 k,其中功能分支被合并到发布分支中。我该怎么做?

4

3 回答 3

2

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

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

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
于 2013-09-19T12:54:21.583 回答
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用作寻呼机),点击/然后键入 sha for g,这将导致less搜索该git logsha 的输出。然后只需在输出中向上滚动一点,直到找到q.

于 2013-09-20T04:40:55.840 回答
-1

我建议这样做:

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

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

于 2013-09-19T14:17:06.767 回答