我将一些源代码签入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 show :/keyword(s)
这里<keywords>可以是单个单词,也可以是由空格组成的复杂正则表达式模式,所以请确保在必要时引用/转义,例如:
git log -1 -p ":/a few words"
或者,可以指定一个起始点,以找到从特定点可到达的最近提交,例如:
git show 'HEAD^{/fix nasty bug}'
参见:git修订手册。
搜索提交日志(所有分支)中的给定文本:
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