git 如何所有分支里边搜索代码片段

2022 年 1 月 20 日
 huazhaozhe

本来有个表基本不需要更新,突然今天要更新一下,写代码的人离职了,整理数据的代码又不知道提交到那个分支上去了也没合并,好一个大坑,那么怎么找到这部分代码呢

搜索了下尝试了下边这个方式不得行

git grep "are you ok" | $(git rev-list --all)
5372 次点击
所在节点    git
35 条回复
SoloCompany
2022 年 1 月 20 日
不嫌慢可以用 for-each-ref 啊
SoloCompany
2022 年 1 月 20 日
--grep 是查找 commit message 不是文件内容
BBCCBB
2022 年 1 月 20 日
试试 git log -S 或者 reflog 呢
jptx
2022 年 1 月 20 日
也可以使用 gitbase 这个工具,用写 SQL 的方式来从 git 中搜索感兴趣的内容。
官方仓库: https://github.com/src-d/gitbase
你这个需求可以参考这条 SQL 来处理,这条 SQL 是从所有地方搜索 TODO 的,可以改成你要搜索的代码片段: https://github.com/src-d/gitbase/blob/master/docs/using-gitbase/examples.md#get-miscelaneous-information-about-lines-with-a--todo-comment-in-head
J55s5
2022 年 1 月 20 日
我觉得可以先筛出提交者,然后再进行查找的工作
a132811
2022 年 1 月 20 日
a132811
2022 年 1 月 20 日
总结一下:
```
搜索所有的 commit 的 code diff(最快)

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

搜索所有 local branch

git branch | tr -d \* | sed '/->/d' | xargs git grep <regexp>

搜索所有的 commit

git grep -F "keyword" $(git rev-list --all)
git grep <regexp> $(git rev-list --all)
git rev-list --all | (while read rev; do git grep -e <regexp> $rev; done)


```
ynyounuo
2022 年 1 月 21 日
你这个需求用 github 网友的 pickaxe-diff 是最简洁舒适的
结合了 pickaxe-all 但是又不会 print 所有 log -p 无关的 diff

具体参考这里:
https://gist.github.com/phil-blain/2a1cf81a0030001d33158e44a35ceda6#limiting-diff-output
huazhaozhe
2022 年 1 月 21 日
@a132811 这个可以,能找到 commit 就有救了👍🏻
huazhaozhe
2022 年 1 月 21 日
@a132811 正文里边那个 linux 其实可以,就是有点慢
huazhaozhe
2022 年 1 月 21 日
@a132811 奇怪的是,windows 下这个命令没有结果
huazhaozhe
2022 年 1 月 21 日
@a132811 windows 下 git log -p --all -S 'search string'这个命令没有结果,linux 可以
huazhaozhe
2022 年 1 月 21 日
@wzzzx 每个人 commit 堆积的有点多,最好还是能直接找到🈶相关代码片段的 commit 好一些
huazhaozhe
2022 年 1 月 21 日
@SoloCompany 确实
huazhaozhe
2022 年 1 月 21 日
@ynyounuo 这个厉害,里边前半部分和楼上的一样,已经满足需求了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/829528

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX