使用以下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,其中功能分支被合并到发布分支中。我该怎么做?
答案 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。