Answers:
您可以看到带有的悬空提交git log -g
。
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
因此,您可以执行以下操作在悬空的提交消息中找到特定的字符串:
git log -g --grep=search_for_this
另外,如果您要搜索特定字符串的更改,则可以使用镐搜索选项“ -S”:
git log -g -Ssearch_for_this
# this also works but may be slower, it only shows text-added results
git grep search_for_this $(git log -g --pretty=format:%h)
Git 1.7.4将添加-G选项,使您可以传递-G <regexp>来查找何时移动了包含<regexp>的行,而-S无法做到。-S仅在包含字符串的总行数发生更改(即添加/删除字符串)时告诉您。
最后,您可以使用gitk通过以下方式可视化悬空的提交:
gitk --all $(git log -g --pretty=format:%h)
然后使用其搜索功能查找放错位置的文件。所有这些工作都假设丢失的提交尚未“过期”并被垃圾回收,如果它悬垂了30天并且您使reflog过期或运行使它们过期的命令,则可能会发生。
!git fsck --unreachable | sed -ne 's/^unreachable commit //p' | xargs git log --no-walk
在Mercurial中,您可以hg log --keyword
用来搜索提交消息中的关键字并hg log --user
搜索特定的用户。请参阅参考资料hg help log
,以限制日志。
hg log -k
搜索也将用户名和文件名提交到变更集中(我在commands.py:log中看到了),这是我在hg中不了解的少数内容之一。应该有单独的选项来搜索提交消息和文件名。似乎hg log --template '{desc}\n'|grep
是肯定的方法。
hg grep --all <term>
除了使用or的richq答案外:还请查看以下git维护者Junio C Hamano的博客文章:git log -g --grep=<regexp>
git grep -e <regexp> $(git log -g --pretty=format:%h)
这两个混帐的grep和--grep git的日志是面向行的,在他们查找符合指定模式的行。
您可以使用git log --grep=<foo> --grep=<bar>
(或git log --author=<foo> --grep=<bar>
在内部转换为两个--grep
)来查找与任何一种模式(隐式或语义)匹配的提交。
由于是面向行的,因此有用的AND语义git log --all-match --grep=<foo> --grep=<bar>
用于查找在某处同时具有第一行匹配和第二行匹配的提交。
随着git grep
您可以将多个模式(所有这一切都必须使用组合-e <regexp>
与形式)--or
(这是默认), ,,--and
和。对于grep 意味着该文件必须具有与每个替代项匹配的行。--not
(
)
--all-match
任何将引用作为参数的命令将接受--all
手册页中记录的选项git rev-list
,如下所示:
--all
Pretend as if all the refs in $GIT_DIR/refs/ are listed on the
command line as <commit>.
因此,例如git log -Sstring --all
将显示所有提及的提交,这些提交string
可从分支或标签访问(我假设您的悬空提交至少使用标签命名)。
git grep
,--all
似乎已被翻译为或用作--all-match
。对我来说,这似乎是一个错误。.使用Git 1.7.2.3(使用$(git rev-list --all)
作品)。
不了解git,但是在Mercurial中,我只是将hg日志的输出通过管道传递到sed / perl /任何脚本中,以搜索所需的内容。您可以根据需要使用模板或样式自定义hg日志的输出,以使其更易于搜索。
这将包括回购中的所有命名分支。水星没有悬挂的斑点afaik之类的东西。
如果您是vim用户,则可以安装tig(apt-get install tig),并使用/,相同的命令在vim上搜索
git中的一个命令,我认为找到字符串要容易得多:
git log --pretty=oneline --grep "string to search"
在Git 2.0.4中工作