gpt4 book ai didi

git - 查找给定 git 提交是否在标记版本中的最佳方法是什么

转载 作者:太空狗 更新时间:2023-10-29 13:52:15 24 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

git tag --contains f414f31

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

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


更新:

在下面的评论中回答进一步的问题:

Is there any easy way to find out all the equivalent commits that may have been applied to separate branches?

您可以使用 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 的情况下发生变化,但是如果你必须在 cherry-pick 或 rebase 期间修复任何冲突,你可能最终会更改补丁的文本。在那种情况下,这将找不到提交。

我相信您也可以通过调用 git cherry 来做到这一点不知何故,但我永远不记得争论的方向是什么……;)

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com