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

时间:2010-06-09 06:35:57

标签: git

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

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

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

编辑:有人也提出了相反的问题:In Git, is there a way to get the “friendly” name for an arbitrary commit?

3 个答案:

答案 0 :(得分:18)

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

E.g。

git show ":/Issue #299"

这在任何可以使用提交的地方都有效。 E.g。

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访问的最年轻的匹配提交   如果提交消息以!开头,则必须重复该操作;目前仅保留特殊序列:/!,后跟除!以外的其他内容。

答案 1 :(得分:8)

git log --grep=word

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

添加各种格式选项,例如

git log --grep=word --pretty=oneline
git log --grep=word --pretty=format:"%h"

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


另请参阅“Fun with git log --grep

git log --grep=frotz --grep=nitfol --since=1.month
  

这会查找上个月发生的提交,并在提交日志消息中提到frotz或nitfol。
  与通常的“git grep”一样,给出多个模式意味着“这个或那个”。

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

  

git log”系列使用grep机制的方式恰恰就是“整个事情是否匹配?”方面,而不是“向我显示符合这些标准的行”方面。它允许您像这样使用这种机制:

git log --all-match --grep=frotz --author=Linus
  

这将显示提及frotz并由Linus撰写的提交。

答案 2 :(得分:1)

尝试

git rev-list --grep='message excerpt' HEAD

这将仅列出HEAD的祖先提交。如果你想搜索存储库中的所有提交(包括那些不是HEAD祖先的提交),除了通过手动遍历所有分支头并运行此命令之外,我不知道如何做到这一点。 (可能有一种方法,我只是不知道它可能是什么)