如何通过提交消息来searchGit存储库?

我用提交信息“Build 0051”检查了一些源代码到GIT中。

但是,我似乎无法再find源代码 – 我如何使用命令行从GIT存储库中提取此源代码?

更新

  1. 使用SmartGIT检查版本0043,0044,0045和0046。
  2. 检出0043,并在不同的分支上检查最多0051的版本。
  3. 再次检出0043。
  4. 现在,0051已经消失了。

更新

源代码肯定存在,现在是检查它的一个问题:

C:\Source>git log -g --grep="0052" commit 77b1f718d19e5cf46e2fab8405a9a0859c9c2889 Reflog: HEAD@{10} (unknown <Mike@.(none)>) Reflog message: commit: 20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052. Author: unknown <Mike@.(none)> Date: Fri Aug 19 17:24:51 2011 +0100 20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052. C:\Source> 

更新

使用以下来检索丢失的源代码:

 C:\Source>git checkout HEAD@{10} Previous HEAD position was aa09ace... 20110819 - 1045 - GL: Intermediate version. File version: v0.5.0 build 0043. HEAD is now at 77b1f71... 20110819 - 1724 - GL: Intermediate version. File version: v0.5.0 build 0052. 

现在,SmartGit中的所有内容都可以看到。 问题解决了 – 你们是最好的,特别是@shelhamer!

search提交日志(跨越所有分支机构)给定的文本:

 git log --all --grep='Build 0051' 

要通过回购的历史logging来search提交的实际内容,请使用:

 git grep 'Build 0051' $(git rev-list --all) 

显示给定文本的所有实例,包含文件名和提交sha1。

最后,作为最后的手段,如果你的提交是--walk-reflogs ,你可以使用-g标志searchreflog本身(简称--walk-reflogs

 git log -g --grep='Build 0051' 

编辑:如果你似乎失去了你的历史,检查reflog作为你的安全网。 在列出的其中一个提交中查找Build 0051

 git reflog 

你可能只是简单地将HEAD设置为“Build 0051”提交不可见的历史logging的一部分,或者实际上已经将其吹走。 git-ready的reflog文章可能有帮助。

为了从reflog中恢复你的提交 :做一个你find的提交的git签出(并可选地创build一个新的分支或标签作为参考)

 git checkout 77b1f718d19e5cf46e2fab8405a9a0859c9c2889 # alternative, using reflog (see git-ready link provided) # git checkout HEAD@{10} git checkout -b build_0051 # make a new branch with the build_0051 as the tip 

我把这个放在我的〜/ .gitconfig中:

 [alias] find = log --pretty=\"format:%Cgreen%H %Cblue%s\" --name-status --grep 

然后,我可以input“git find string”,并获取包含消息中该string的所有提交列表。 例如,要查找引用票证#33的所有提交:

 029a641667d6d92e16deccae7ebdeef792d8336b Added isAttachmentEditable() and isAttachmentViewable() methods. (references #33) M library/Dbs/Db/Row/Login.php a1bccdcd29ed29573d2fb799e2a564b5419af2e2 Add permissions checks for attachments of custom strategies. (references #33). M application/controllers/AttachmentController.php 38c8db557e5ec0963a7292aef0220ad1088f518d Fix permissions. (references #33) M application/views/scripts/attachment/_row.phtml 041db110859e7259caeffd3fed7a3d7b18a3d564 Fix permissions. (references #33) M application/views/scripts/attachment/index.phtml 388df3b4faae50f8a8d8beb85750dd0aa67736ed Added getStrategy() method. (references #33) M library/Dbs/Db/Row/Attachment.php 
 git log --grep=<pattern> Limit the commits output to ones with log message that matches the specified pattern (regular expression). 
 git log --grep="Build 0051" 

应该做的伎俩

尝试这个!

 git log | grep -b3 "Build 0051" 

虽然有点晚了,但是还有:/它是专用的表示法,用于根据提交消息指定提交(或修订版),只是在searchstring前加上:/ ,例如:

 git show :/message 

这里<message>可以是由空格组成的复杂正则expression式模式,所以请确保在必要时引用/转义,例如:

 git log -1 -p ":/a few words" 

或者,可以指定一个起始点,以查找从特定点可访问的最新的提交,例如:

 git show 'HEAD^{/fix nasty bug}' 

请参阅: git修订手册 。