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

2022-01-20 17:53:09 +08:00
 huazhaozhe

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

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

git grep "are you ok" | $(git rev-list --all)
4194 次点击
所在节点    git
35 条回复
SoloCompany
2022-01-20 21:44:02 +08:00
不嫌慢可以用 for-each-ref 啊
SoloCompany
2022-01-20 21:50:24 +08:00
--grep 是查找 commit message 不是文件内容
BBCCBB
2022-01-20 22:08:45 +08:00
试试 git log -S 或者 reflog 呢
jptx
2022-01-20 22:53:35 +08:00
也可以使用 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
wzzzx
2022-01-20 23:04:12 +08:00
我觉得可以先筛出提交者,然后再进行查找的工作
a132811
2022-01-20 23:52:25 +08:00
a132811
2022-01-20 23:59:53 +08:00
总结一下:
```
搜索所有的 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-01-21 00:12:42 +08:00
你这个需求用 github 网友的 pickaxe-diff 是最简洁舒适的
结合了 pickaxe-all 但是又不会 print 所有 log -p 无关的 diff

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

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

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

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

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

© 2021 V2EX