处理修复程序时的一个常见问题是找出应用了给定修复程序的版本,即“此修复程序是否在版本 X 中”。在 git 中检查包含给定提交 ID 的标记发布的最佳方法是什么。

使用 gitk 手动观察复杂 merge 模式中的提交是非常困难的。

到目前为止,我们能想到的最佳解决方案是使用 git-cherry:

git-cherry -v $TAG $COMMIT $COMMIT^

并查看它是否以 - 出现。有没有更好的办法?

最佳答案

这很好而且很容易做到,事实上,使用以下命令:

git tag --contains f414f31

这将列出所有标签,例如 f414f31 是标签的祖先之一,或者标签本身指向该提交。

这对于查找哪些版本的 git 包含特定功能特别有用:)

更新:

在下面的评论中回答另一个问题:



您可以使用 git patch-id 找到提交引入的补丁的哈希值 - 这是 git cherrygit rebase 等用于查找提交是否已被挑选的命令。因此,如果您想查找 f414f31 引入的更改是否也由分支 foo 上的提交引入,您可以始终使用类似的简短 shell 脚本:
patch_id () {
    git show $1 | git patch-id | cut -d ' ' -f1
}

P=$(patch_id f414f31)

git rev-list foo | while read C
do
    P2=$(patch_id $C)
    if [ x$P = x$P2 ]
    then
        echo "Also introduced by commit $C"
    fi
done

如果要查看所有分支,可以将 foo 替换为 --allJefromi 下面的评论提出了一些其他改进,例如如果您想停止关注第一个匹配项(如果您只搜索单个分支是明智的),您可以添加 break,或者使用 git rev-list foo ^f414f31 来排除原始提交的所有祖先。

Jefromi 的评论也提醒我,我应该对这种方法多说一点。 documentation for git patch-id 解释说生成的 ID“相当稳定”——行号和空格可以在不影响 ID 的情况下改变,但是如果你必须在挑选或 rebase 期间修复任何冲突,你最终可能会更改修补。在这种情况下,这不会找到提交。

我相信你也可以通过调用 git cherry 以某种方式来做到这一点,但我永远不记得这些论点应该走哪条路......;)

关于git - 查找给定 git commit 是否在标记版本中的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9018632/

10-14 19:36
查看更多