當做一個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