我将一些源代码签入GIT,并提交消息“Build 0051”。

然而,我似乎再也找不到那个源代码了——如何使用命令行从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>

当前回答

搜索提交日志(所有分支)中的给定文本:

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

这样做的同时忽略大小写在grep搜索:

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

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

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

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

最后,作为最后的手段,如果你的提交是悬空的,根本没有连接到历史记录,你可以用-g标志搜索reflog本身(——walk-reflogs的缩写:

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

编辑:如果您似乎丢失了您的历史记录,请检查reflog作为您的安全网。在列出的提交之一中查找Build 0051

git reflog

你可能只是把你的头放在了“Build 0051”提交不可见的历史部分,或者你可能真的把它吹走了。“准备好重新发行”的文章可能会有帮助。

要从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

其他回答

搜索提交日志(所有分支)中的给定文本:

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

这样做的同时忽略大小写在grep搜索:

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

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

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

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

最后,作为最后的手段,如果你的提交是悬空的,根本没有连接到历史记录,你可以用-g标志搜索reflog本身(——walk-reflogs的缩写:

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

编辑:如果您似乎丢失了您的历史记录,请检查reflog作为您的安全网。在列出的提交之一中查找Build 0051

git reflog

你可能只是把你的头放在了“Build 0051”提交不可见的历史部分,或者你可能真的把它吹走了。“准备好重新发行”的文章可能会有帮助。

要从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
git log --grep="Build 0051"

应该能成功

首先列出所使用的提交

git log --oneline

然后找到SHA的提交(消息),然后我使用

 git log --stat 8zad24d

(8zad24d)是与您感兴趣的提交相关的SHA(第一对SHA示例(8zad24d),您可以选择4个字符或6个或8个或整个SHA)来找到正确的信息

我把它放在~/.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——all——grep命令的一个小补充: 在我的情况下,我必须转义括号内的消息:

git log --all --grep="\[C\] Ticket-1001: Fix nasty things"