2010-06-09 39 views
11

當做一個git tag,我並不總是很好記住HEAD〜6(例如)是包容性的還是排他性的。有什麼辦法從它的消息中獲取提交的SHA?

鑑於我的大部分提交都帶有問題編號的前綴,我想知道是否有一些神奇的命令從其消息的一部分搜索提交SHA。

我知道這很容易做到從那裏git log和工作,但我想更簡單的:)

編輯:也有人提出相反的問題:In Git, is there a way to get the 「friendly」 name for an arbitrary commit?

回答

17

您可以使用:/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訪問的最年輕匹配提交。
如果提交消息以!開頭,則必須重複該操作;特殊序列:/!,其次是除!以外的其他內容現在保留。

+0

)如果文本不是唯一的,會發生什麼? – Benjol 2010-06-09 07:02:00

+0

@ Benjol:IIRC,它發現最年輕的可及提交;您必須檢查文檔 – 2010-06-09 07:13:06

+0

謝謝,任何想法的關鍵字看起來':/'不太好... – Benjol 2010-06-09 07:51:12

1

嘗試

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

這將只列出作爲HEAD的祖先的提交。如果您想搜索存儲庫中的所有提交(包括那些不是祖先HEAD的提交),我不知道如何執行該操作,而不是通過手動手動運行所有分支頭並運行此命令。 (有可能是一個辦法,我只是不知道它可能是什麼)

8
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),和你已準備好出發。


參見「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機制的方式正是爲了這個「整個事情是否有匹配?」方面,而不是「向我展示符合這些標準的方面」方面。它可以讓你使用這個機制就像這樣:

這將顯示提及了frotz和由Linus書面提交。

+0

我正在尋找一些我可以在另一個命令中直接使用/使用的東西,所以如果你添加'--pretty = format:「%h」',那麼我會將你標記爲答案;) – Benjol 2010-06-09 06:44:52

+0

將--pretty = online添加到命令應該會提高可讀性。 – Unknown 2010-06-09 06:45:23

+0

@Benjol:添加了格式選項。 – VonC 2010-06-09 06:49:35

相關問題