本来有个表基本不需要更新,突然今天要更新一下,写代码的人离职了,整理数据的代码又不知道提交到那个分支上去了也没合并,好一个大坑,那么怎么找到这部分代码呢
搜索了下尝试了下边这个方式不得行
git grep "are you ok" | $(git rev-list --all)
1
gadfly3173 2022-01-20 18:00:45 +08:00
知道提交时间的话不如直接去看提交记录
|
2
huazhaozhe OP @gadfly3173 都不知道在哪个分支怎么看体检记录🤢
|
3
huazhaozhe OP 更新
linux 下这个命令跑了好久终于有结果了,代码也没那么多啊,可能是分支太多了吧🙃 这个命令在 windows 下要怎么使用呢 |
4
gadfly3173 2022-01-20 18:06:10 +08:00
@huazhaozhe #2 用 gui 可以看,比如 sourceTree gitkraken 之类的
|
5
huazhaozhe OP @gadfly3173 emm 虽然知道这些个工具但是没用过,一般都是命令行
|
6
wolfie 2022-01-20 18:13:10 +08:00
|
7
gadfly3173 2022-01-20 18:15:39 +08:00
@huazhaozhe #5 以及 powershell 不支持这个命令的写法的话可以直接用 git bash
|
8
huazhaozhe OP @wolfie 好几百个分支,写个程序每个分支复制一个文件夹也不是不可以,然后文本搜索呢,虽然我有工具全盘搜索文本内容,嗯,感觉一个小时能弄完😏
|
9
huazhaozhe OP @gadfly3173 git bash 告诉我参数太长,我很想知道 windows 里边怎么写 linux 里边的$(ls -a)这样子的命令,cmder 测试不支持
|
10
daxiguaya 2022-01-20 18:21:44 +08:00
|
11
gadfly3173 2022-01-20 18:23:14 +08:00
@huazhaozhe #9 gitbash 有那么容易参数过长么。。。你的输入是啥啊
|
12
rbe 2022-01-20 18:26:25 +08:00
@huazhaozhe #9 参数太长就用 xargs
git rev-list --all | git grep "are you ok" |
13
huazhaozhe OP @gadfly3173 就正文里边的那个
|
14
huazhaozhe OP @rbe 这个搜不到结果命令就结束了
|
15
huazhaozhe OP @daxiguaya 内网环境没有这个东西😤
|
16
gadfly3173 2022-01-20 18:34:27 +08:00
@huazhaozhe #15 下面有本地部署的
|
17
rbe 2022-01-20 18:35:02 +08:00
@huazhaozhe #14 搜不到结果?那说明你搜错了吧,尝试缩小一些关键词范围呗.
还有个办法是 git bisect 二分查找,每次 checkout 之后去检查代码里有没有你要的那些信息 |
18
huazhaozhe OP @rbe windows 下尝试确实是的,linux 还没试过,不过内容肯定存在的,因为 linux 下已经通过正文里边的方式搜到结果了
|
19
gadfly3173 2022-01-20 18:38:57 +08:00
说来你知道是谁提交的话 还有个方法是 git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/ 参考 https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2 |
20
huazhaozhe OP 貌似通过 git rev-list --all --grep=addE 可以一个命令完成,明天去试试,下班下班
|
21
SoloCompany 2022-01-20 21:44:02 +08:00
不嫌慢可以用 for-each-ref 啊
|
22
SoloCompany 2022-01-20 21:50:24 +08:00
--grep 是查找 commit message 不是文件内容
|
23
BBCCBB 2022-01-20 22:08:45 +08:00
试试 git log -S 或者 reflog 呢
|
24
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 |
25
wzzzx 2022-01-20 23:04:12 +08:00
我觉得可以先筛出提交者,然后再进行查找的工作
|
26
a132811 2022-01-20 23:52:25 +08:00
你写错了,应该改成:
`git grep "are you ok" $(git rev-list --all)` 1. 谷歌大法好: https://www.google.com/search?q=git+grep+all+branches&oq=git+grep+all&aqs=chrome.0.0i20i263i512j0i512l3j69i57j0i512j0i22i30l4.3117j0j7&sourceid=chrome&ie=UTF-8 2. 面对 stackoverflow 编程: https://stackoverflow.com/questions/15292391/is-it-possible-to-perform-a-grep-search-in-all-the-branches-of-a-git-project |
27
a132811 2022-01-20 23:59:53 +08:00 2
总结一下:
``` 搜索所有的 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) ``` |
28
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 |
29
huazhaozhe OP @a132811 这个可以,能找到 commit 就有救了👍🏻
|
30
huazhaozhe OP @a132811 正文里边那个 linux 其实可以,就是有点慢
|
31
huazhaozhe OP @a132811 奇怪的是,windows 下这个命令没有结果
|
32
huazhaozhe OP @a132811 windows 下 git log -p --all -S 'search string'这个命令没有结果,linux 可以
|
33
huazhaozhe OP @wzzzx 每个人 commit 堆积的有点多,最好还是能直接找到🈶相关代码片段的 commit 好一些
|
34
huazhaozhe OP @SoloCompany 确实
|
35
huazhaozhe OP @ynyounuo 这个厉害,里边前半部分和楼上的一样,已经满足需求了
|