处理修复时的一个常见问题是确定给定的修复已应用于哪些版本,即“此修复是否在版本 X 中”。 git 中检查哪些标记版本包含给定提交 ID 的最佳方法是什么?
使用 gitk 手动观察复杂合并模式中的提交非常困难。
到目前为止,我们能想到的最好的解决方案是使用 git-cherry:
git-cherry -v $TAG $COMMIT $COMMIT^
看看它是否出现一个-。有没有更好的办法?
事实上,这很好而且很容易做到,只需使用以下命令:
git tag --contains f414f31
这将列出所有标签f414f31
是标签的祖先之一,或者标签本身指向该提交。
这对于查找哪些版本特别有用git
包含一个特定的功能:)
Update:
回答下面评论中的进一步问题:
有没有简单的方法可以找出可能已应用于单独分支的所有等效提交?
您可以使用以下命令找到提交引入的补丁的哈希值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
with --all
. Jefromi下面的评论提出了一些其他的改进,例如你可以添加一个break
如果您想停止查找第一个匹配项(如果您只搜索单个分支,则这是明智的),或者使用以下命令排除原始提交的所有祖先git rev-list foo ^f414f31
反而。
Jefromi 的评论也提醒我应该对这种方法多说一些。这的文档git patch-id解释说生成的 ID 是“相当稳定的”——行号和空格可以更改而不影响 ID,但是如果您必须在cherry-pick 或 rebase 期间解决任何冲突,则最终可能会更改补丁的文本。在这种情况下,这将找不到提交。
我相信你也可以通过调用来做到这一点git cherry
不知怎的,但我永远记不起争论的方向……;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)