处理修复时遇到的一个常见问题是找出已应用修复程序的版本,即"在X版本中是否已修复".git中检查标记版本包含给定提交ID的最佳方法是什么.
使用gitk手动调整复杂合并模式中的提交是非常困难的.
到目前为止,我们可以提出的最佳解决方案是使用git-cherry:
git-cherry -v $ TAG $ COMMIT $ COMMIT ^
看看它是否出现 - .有没有更好的办法?
事实上,使用以下命令这很容易做到:
git tag --contains f414f31
Run Code Online (Sandbox Code Playgroud)
这将列出所有标签,例如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
Run Code Online (Sandbox Code Playgroud)
如果要查看所有分支,可以替换foo为--all. Jefromi在下面的评论提出了一些其他的改进,例如你可以添加一个break如果你想要停止第一场比赛(如果你只搜索一个分支是合理的),或者通过使用排除原始提交的所有祖先git rev-list foo ^f414f31代替.
Jefromi的评论也提醒我,我应该多说一点这种方法.用于git patch-id解释所生成的ID"相当稳定" 的文档 - 行号和空格可以在不影响ID的情况下进行更改,但是如果您必须在修改过程中修复任何冲突,则最终可能会更改文本补丁.在这种情况下,这将找不到提交.
我确信你也可以通过git cherry不知何故的调用来做到这一点,但我永远不会记得参数的哪个方向意味着......;)