处理修复程序时的一个常见问题是找出应用了给定修复程序的版本,即“此修复程序是否在版本 X 中”。在 git 中检查包含给定提交 ID 的标记发布的最佳方法是什么。
使用 gitk 手动观察复杂 merge 模式中的提交是非常困难的。
到目前为止,我们能想到的最佳解决方案是使用 git-cherry:
git-cherry -v $TAG $COMMIT $COMMIT^
并查看它是否以 - 出现。有没有更好的办法?
最佳答案
这很好而且很容易做到,事实上,使用以下命令:
git tag --contains f414f31
这将列出所有标签,例如
f414f31
是标签的祖先之一,或者标签本身指向该提交。这对于查找哪些版本的
git
包含特定功能特别有用:)更新:
在下面的评论中回答另一个问题:
您可以使用
git patch-id
找到提交引入的补丁的哈希值 - 这是 git cherry
、 git 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
替换为 --all
。 Jefromi 下面的评论提出了一些其他改进,例如如果您想停止关注第一个匹配项(如果您只搜索单个分支是明智的),您可以添加 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/