如何通过提交消息来搜索Git存储库?

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

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

更新

  • 使用SmartGIT检入版本0043,0044,0045和0046。
  • 检出0043,并在不同分支上检查版本高达0051的版本。
  • 再次检出0043。
  • 现在,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!


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

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

    要通过回购的历史记录来搜索提交的实际内容,请使用:

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

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

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

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

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

    git reflog
    

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

    要从reflog中恢复你的提交 :做一个你找到的提交的git签出(并可选地创建一个新的分支或标签以供参考)

    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
    

    然后我可以输入“git find 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).
    
    链接地址: http://www.djcxy.com/p/68743.html

    上一篇: How to search a Git repository by commit message?

    下一篇: pick a commit from another git repository?