git 如何所有分支里边搜索代码片段 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
huazhaozhe
V2EX    git

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

  •  
  •   huazhaozhe 2022-01-20 17:53:09 +08:00 via Android 4859 次点击
    这是一个创建于 1439 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    git grep "are you ok" | $(git rev-list --all) 
    35 条回复    2022-01-21 11:40:48 +08:00
    gadfly3173
        1
    gadfly3173  
       2022-01-20 18:00:45 +08:00
    知道提交时间的话不如直接去看提交记录
    huazhaozhe
        2
    huazhaozhe  
    OP
       2022-01-20 18:02:07 +08:00 via Android
    @gadfly3173 都不知道在哪个分支怎么看体检记录
    huazhaozhe
        3
    huazhaozhe  
    OP
       2022-01-20 18:04:16 +08:00 via Android
    更新
    linux 下这个命令跑了好久终于有结果了,代码也没那么多啊,可能是分支太多了吧
    这个命令在 windows 下要怎么使用呢
    gadfly3173
        4
    gadfly3173  
       2022-01-20 18:06:10 +08:00
    @huazhaozhe #2 用 gui 可以看,比如 sourceTree gitkraken 之类的
    huazhaozhe
        5
    huazhaozhe  
    OP
       2022-01-20 18:09:26 +08:00 via Android
    @gadfly3173 emm 虽然知道这些个工具但是没用过,一般都是命令行
    wolfie
        6
    wolfie  
       2022-01-20 18:13:10 +08:00
    A B C D ... 每个分支一个独立文件夹。
    用 IDE 打开父文件夹。
    gadfly3173
        7
    gadfly3173  
       2022-01-20 18:15:39 +08:00
    @huazhaozhe #5 以及 powershell 不支持这个命令的写法的话可以直接用 git bash
    huazhaozhe
        8
    huazhaozhe  
    OP
       2022-01-20 18:16:55 +08:00 via Android
    @wolfie 好几百个分支,写个程序每个分支复制一个文件夹也不是不可以,然后文本搜索呢,虽然我有工具全盘搜索文本内容,嗯,感觉一个小时能弄完
    huazhaozhe
        9
    huazhaozhe  
    OP
       2022-01-20 18:19:17 +08:00 via Android
    @gadfly3173 git bash 告诉我参数太长,我很想知道 windows 里边怎么写 linux 里边的$(ls -a)这样子的命令,cmder 测试不支持
    daxiguaya
        10
    daxiguaya  
       2022-01-20 18:21:44 +08:00
    gadfly3173
        11
    gadfly3173  
       2022-01-20 18:23:14 +08:00
    @huazhaozhe #9 gitbash 有那么容易参数过长么。。。你的输入是啥啊
    rbe
        12
    rbe  
       2022-01-20 18:26:25 +08:00
    @huazhaozhe #9 参数太长就用 xargs
    git rev-list --all | git grep "are you ok"
    huazhaozhe
        13
    huazhaozhe  
    OP
       2022-01-20 18:26:41 +08:00 via Android/span>
    @gadfly3173 就正文里边的那个
    huazhaozhe
        14
    huazhaozhe  
    OP
       2022-01-20 18:28:38 +08:00 via Android
    @rbe 这个搜不到结果命令就结束了
    huazhaozhe
        15
    huazhaozhe  
    OP
       2022-01-20 18:30:23 +08:00 via Android
    @daxiguaya 内网环境没有这个东西
    gadfly3173
        16
    gadfly3173  
       2022-01-20 18:34:27 +08:00
    @huazhaozhe #15 下面有本地部署的
    rbe
        17
    rbe  
       2022-01-20 18:35:02 +08:00
    @huazhaozhe #14 搜不到结果?那说明你搜错了吧,尝试缩小一些关键词范围呗.
    还有个办法是 git bisect 二分查找,每次 checkout 之后去检查代码里有没有你要的那些信息
    huazhaozhe
        18
    huazhaozhe  
    OP
       2022-01-20 18:38:50 +08:00 via Android
    @rbe windows 下尝试确实是的,linux 还没试过,不过内容肯定存在的,因为 linux 下已经通过正文里边的方式搜到结果了
    gadfly3173
        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
    huazhaozhe
        20
    huazhaozhe  
    OP
       2022-01-20 18:39:55 +08:00 via Android
    貌似通过 git rev-list --all --grep=addE 可以一个命令完成,明天去试试,下班下班
    SoloCompany
        21
    SoloCompany  
       2022-01-20 21:44:02 +08:00
    不嫌慢可以用 for-each-ref 啊
    SoloCompany
        22
    SoloCompany  
       2022-01-20 21:50:24 +08:00
    --grep 是查找 commit message 不是文件内容
    BBCCBB
        23
    BBCCBB  
       2022-01-20 22:08:45 +08:00
    试试 git log -S 或者 reflog 呢
    jptx
        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
    wzzzx
        25
    wzzzx  
       2022-01-20 23:04:12 +08:00
    我觉得可以先筛出提交者,然后再进行查找的工作
    a132811
        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)


    ```
    ynyounuo
        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
    huazhaozhe
        29
    huazhaozhe  
    OP
       2022-01-21 11:34:50 +08:00 via Android
    @a132811 这个可以,能找到 commit 就有救了
    huazhaozhe
        30
    huazhaozhe  
    OP
       2022-01-21 11:35:59 +08:00 via Android
    @a132811 正文里边那个 linux 其实可以,就是有点慢
    huazhaozhe
        31
    huazhaozhe  
    OP
       2022-01-21 11:37:07 +08:00 via Android
    @a132811 奇怪的是,windows 下这个命令没有结果
    huazhaozhe
        32
    huazhaozhe  
    OP
       2022-01-21 11:37:35 +08:00 via Android
    @a132811 windows 下 git log -p --all -S 'search string'这个命令没有结果,linux 可以
    huazhaozhe
        33
    huazhaozhe  
    OP
       2022-01-21 11:39:32 +08:00 via Android
    @wzzzx 每个人 commit 堆积的有点多,最好还是能直接找到相关代码片段的 commit 好一些
    huazhaozhe
        34
    huazhaozhe  
    OP
       2022-01-21 11:39:54 +08:00 via Android
    @SoloCompany 确实
    huazhaozhe
        35
    huazhaozhe  
    OP
       2022-01-21 11:40:48 +08:00 via Android
    @ynyounuo 这个厉害,里边前半部分和楼上的一样,已经满足需求了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     941 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:49 PVG 06:49 LAX 14:49 JFK 17:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86