有没有办法从它的消息中获取提交的SHA?

Ben*_*jol 12 git

在做一个时git tag,我并不总是很记得HEAD~6(例如)是包容性的还是排他性的.

鉴于我的大部分提交都以问题编号为前缀,我想知道是否有一些魔术命令用于从其部分消息中搜索提交SHA.

我知道git log从那里开始工作很容易,但我想要更容易:)

编辑:有人也提出了相反的问题:在Git中,有没有办法获得任意提交的"友好"名称?

CB *_*ley 18

您可以使用:/blah语法指定其提交消息以给定文本开头的提交.

例如

git show ":/Issue #299"
Run Code Online (Sandbox Code Playgroud)

这在任何可以使用提交的地方都有效.例如

git cherry-pick ":/Issue #299"
Run Code Online (Sandbox Code Playgroud)

如果您确实需要提交的SHA-1,则可以使用rev-parse.

git rev-parse ":/Issue #299"
Run Code Online (Sandbox Code Playgroud)

请参阅git rev-parse手册页"SPECIFYING REVISIONS"部分:

冒号,后跟斜杠,后跟文本:
这将命名一个提交,其提交消息以指定的文本开头.
此名称返回可从任何ref访问的最年轻的匹配提交.
如果提交消息以a开头!,则必须重复该操作; 特殊序列:/!,其次!是现在保留的其他内容.


Von*_*onC 8

git log --grep=word
Run Code Online (Sandbox Code Playgroud)

应该帮助找到相关的提交.
(而不是搜索提交内容,其中git log -S(pickaxe选项)或git grep更合适)

添加各种格式选项

git log --grep=word --pretty=oneline
git log --grep=word --pretty=format:"%h"
Run Code Online (Sandbox Code Playgroud)

(最后一个只显示SHA1),你很高兴.


另见" 有趣git log --grep "

git log --grep=frotz --grep=nitfol --since=1.month
Run Code Online (Sandbox Code Playgroud)

这将查找上个月内发生的提交,并在其提交日志消息中提及frotz或nitfol.
与通常的"git grep"一样,给出多个模式意味着"这个或那个".

文章指出git grep是面向行的,并在此git log --grep命令中使用--all-match选项.

" git log"家族使用grep机制的方式正是因为"整个事情是否匹配?" 方面,而不是"向我显示符合这些标准的行"方面.它允许您像这样使用此机制:

git log --all-match --grep=frotz --author=Linus
Run Code Online (Sandbox Code Playgroud)

这将显示提及frotz并由Linus编写的提交.