当做一个git tag
,我并不总是很好记住HEAD〜6(例如)是包容性的还是排他性的。有什么办法从它的消息中获取提交的SHA?
鉴于我的大部分提交都带有问题编号的前缀,我想知道是否有一些神奇的命令从其消息的一部分搜索提交SHA。
我知道这很容易做到从那里git log
和工作,但我想更简单的:)
编辑:也有人提出相反的问题:In Git, is there a way to get the “friendly” name for an arbitrary commit?
当做一个git tag
,我并不总是很好记住HEAD〜6(例如)是包容性的还是排他性的。有什么办法从它的消息中获取提交的SHA?
鉴于我的大部分提交都带有问题编号的前缀,我想知道是否有一些神奇的命令从其消息的一部分搜索提交SHA。
我知道这很容易做到从那里git log
和工作,但我想更简单的:)
编辑:也有人提出相反的问题:In Git, is there a way to get the “friendly” name for an arbitrary commit?
您可以使用:/blah
语法指定提交消息以给定文本开头的提交。
E.g.
git show ":/Issue #299"
这在任何可以使用提交的地方都是有效的。例如。
git cherry-pick ":/Issue #299"
如果你实际上需要提交的SHA-1,你可以使用rev-parse。
git rev-parse ":/Issue #299"
见"SPECIFYING REVISIONS" section of the git rev-parse man page:
冒号,然后是斜线,跟文本:
这名提交,其提交信息与指定的文本开始。
该名称返回可从任何ref访问的最年轻匹配提交。
如果提交消息以!
开头,则必须重复该操作;特殊序列:/!
,其次是除!
以外的其他内容现在保留。
尝试
git rev-list --grep='message excerpt' HEAD
这将只列出作为HEAD
的祖先的提交。如果您想搜索存储库中的所有提交(包括那些不是祖先HEAD
的提交),我不知道如何执行该操作,而不是通过手动手动运行所有分支头并运行此命令。 (有可能是一个办法,我只是不知道它可能是什么)
git log --grep=word
应有助于找到相关的承诺。
(而不是寻找commit contents,在那里的git log -S
(鹤嘴锄选项)或git grep
更合适)
添加各种格式选项,如
git log --grep=word --pretty=oneline
git log --grep=word --pretty=format:"%h"
(最后一个只显示SHA1),和你已准备好出发。
git log --grep=frotz --grep=nitfol --since=1.month
这个发现在过去一个月内发生的事情,并在其提交日志信息提及的任何或了frotz nitfol的提交。
与通常的“git grep”一样,给出多个模式意味着“这个或那个”。
的文章指出,git grep
是面向行的,并使用此命令git log --grep
的--all-match选项。
“
git log
”家庭使用grep机制的方式正是为了这个“整个事情是否有匹配?”方面,而不是“向我展示符合这些标准的方面”方面。它可以让你使用这个机制就像这样:
这将显示提及了frotz和由Linus书面提交。
)如果文本不是唯一的,会发生什么? – Benjol 2010-06-09 07:02:00
@ Benjol:IIRC,它发现最年轻的可及提交;您必须检查文档 – 2010-06-09 07:13:06
谢谢,任何想法的关键字看起来':/'不太好... – Benjol 2010-06-09 07:51:12