分类: 默认分类

  • Git 批量删除 Branch & Tag 操作手册

    Git 批量删除 Branch & Tag 操作手册

    在 git bash 中执行命令。

    一、批量删除远程 Branches(仅已合并到主分支的)

    完整流程:

    # 1. 更新远程信息,并清理本地已删除的远程分支引用
    git fetch --prune
    # 2. 切换到主分支(假设是 master,也可能是 main)
    git checkout master
    git pull origin master
    # 3. 列出所有已合并到 master 的远程分支,按前缀筛选,预览待删除列表
    git branch -r --merged origin/master | grep 'origin/release/2025' | sed 's/ *origin\///'
    # 4. 确认无误后执行删除
    git branch -r --merged origin/master | grep 'origin/release/2025' | sed 's/ *origin\///' | xargs -I {} git push origin --delete {}

    关键点: – --merged origin/master 确保只删除已合并到主分支的分支 – sed 's/ *origin\///' 去掉 origin/ 前缀和行首空格 – 使用 git push origin --delete {}git push origin :{} 更可读

    二、批量删除远程 Tags

    按前缀删除远程 Tag:

    # 1. 先预览要删除的 tag
    git ls-remote --tags origin | grep 'refs/tags/release-2025' | awk '{print $2}'
    # 2. 确认无误后执行删除
    git ls-remote --tags origin | grep 'refs/tags/release-2025' | awk '{print ":" $2}' | xargs git push origin

    三、清理本地多余的 Tags(远程已删除但本地还有的)

    # 1. 更新远程信息并清理本地已删除的远程分支引用
    git fetch --prune
    # 2. 预览本地有但远程没有的 tag
    diff <(git tag | sort) <(git ls-remote --tags origin | awk '{print $2}' | sed 's#refs/tags/##' | sort) | grep '^<' | awk '{print $2}'
    # 3. 确认无误后删除
    diff <(git tag | sort) <(git ls-remote --tags origin | awk '{print $2}' | sed 's#refs/tags/##' | sort) | grep '^<' | awk '{print $2}' | xargs git tag -d

    原理:本地所有 tag 减去远程所有 tag,得到远程已删除的 tag。

    四、按时间筛选删除

    Git 原生不支持按时间筛选 branch、tag,但可以结合 shell 实现,以2025年之前为例。

    删除指定日期之前且已合并的远程分支:

    # 预览
    git branch -r --merged origin/master --sort=committerdate --format='%(refname:short) %(committerdate:short)' | grep 'origin/' | awk '$2 < "2025-01-01" {print $1}' | sed 's#origin/##'
    # 删除
    git branch -r --merged origin/master --sort=committerdate --format='%(refname:short) %(committerdate:short)' | grep 'origin/' | awk '$2 < "2025-01-01" {print $1}' | sed 's#origin/##' | xargs -I {} git push origin --delete {}

    删除指定日期之前的远程 tag:

    # 预览
    git for-each-ref --sort=taggerdate --format='%(refname:short) %(taggerdate:short)' refs/tags | awk '$2 < "2025-01-01" {print $1}'
    # 删除
    git for-each-ref --sort=taggerdate --format='%(refname:short) %(taggerdate:short)' refs/tags | awk '$2 < "2025-01-01" {print ":" $1}' | xargs git push origin

    五、安全操作检查

    步骤说明
    ① 先预览在删除命令前先用 `awk ‘{print $1}’` 看列表
    ② 小范围测试先挑一两个手动删,确认无误再批量
    ③ 备份批量操作前 `git tag -l > tags_backup.txt` 备份列表
    ④ 防误删分支删除务必加 `–merged`,tag 务必核对前缀
  • 小米 MiMo V2.5 邀请注册活动 — 双方各得 ¥10,首单 9 折返现 10%

    小米顶尖大模型 MiMo V2.5 限时邀请活动来了!

    MiMo V2.5 是小米迄今最强的 AI 大模型,专为严肃、复杂的专业工作场景打造。

    现在通过邀请码注册,双方均可获得福利。

    邀请福利

    注册福利

    邀请码:MFVVA4

    好友注册 → 双方各得 ¥10 体验金

    限前 30 人,先到先得

    赠金到账后 40 天有效

    首单福利

    好友首单享 9 折优惠

    邀请人每单返实付金额的 10%

    使用步骤

    点击链接注册小米 MiMo 账号

    登录后进入控制台

    在左下方找到邀请码入口

    输入邀请码 MFVVA4

    体验金立即到账,双方各得 ¥10

    解锁全系模型

    使用邀请码即可解锁 MiMo V2.5 以及小米全系模型能力:

    应对严肃复杂的专业工作

    强大的推理与生成能力

    填码即到账,即刻释放你的卓越创造力

    名额有限,仅限前 30 位,先到先得!

    邀请码:MFVVA4

  • GPT-3 (175B) 参数量完全分解

    核心超参数

    超参数 | 值

    层数 L | 96

    模型维度 d_model | 12,288

    注意力头数 n_heads | 96

    每头维度 d_head | 128

    FFN 维度 d_ff | 4 × 12,288 = 49,152

    词表大小 V | 50,257

    逐项计算

    1. Token Embedding

    V × d = 50,257 × 12,288 = 617,558,016 ≈ 0.618B

    2. Positional Embedding

    GPT-3 的上下文长度为 2,048:

    2,048 × 12,288 = 25,165,824 ≈ 0.025B

    3. 每层 Transformer Block(共 96 层)

    Multi-Head Attention(4 个线性投影):

    W_Q: d × d = 12,288² = 150,994,944

    W_K: 150,994,944

    W_V: 150,994,944

    W_O: 150,994,944

    偏置项: 4 × 12,288 = 49,152(可忽略)

    小计 ≈ 604M

    Feed-Forward Network(2 层):

    W_1: d × d_ff = 12,288 × 49,152 = 603,979,776

    W_2: d_ff × d = 49,152 × 12,288 = 603,979,776

    偏置项: ≈ 61,440(可忽略)

    小计 ≈ 1,208M

    LayerNorm(×2):2 × 12,288 = 24,576(可忽略)

    每层合计 ≈ 1,812M = 1.812B

    汇总

    组件 | 参数量 | 比例

    Token Embedding | ~0.618 B | 0.35%

    Positional Embedding | ~0.025 B | 0.01%

    96 × Attention | ~57.99 B | 33.1%

    96 × FFN | ~115.96 B | 66.3%

    LayerNorm 等 | ~0.005 B | ~0%

    总计 | ≈ 175 B | 100%

    关键结论

    1. FFN 占大头:每层 FFN 参数量是 Attention 的 2 倍,整体占总参数的约 2/3。这是因为 FFN 的中间维度 d_ff = 4d,本质上是两个大矩阵相乘。
    2. Attention 占约 1/3:主要是 Q/K/V/O 四个 d × d 的投影矩阵。
    3. Embedding 占比极小:虽然绝对数字很大(6 亿+),但相对于 175B 来说不到 0.4%。
    4. 计算公式可以简化为:≈ L × 12d² + V × d,其中 12d² = 4d²(Attn) + 8d²(FFN),加上 Embedding 项。
    5. 参数数量与层数 L 和模型维度 d 是线性/二次关系,这也是为什么增大 d 对参数量的影响尤其大。
  • 横风吹动了我的电瓶车

    午后的风毫无征兆地大了起来。我骑着那辆灰色的电瓶车,沿着江边的路往家赶。路两侧的行道树疯了似的摇晃,枯叶裹着沙粒打在脸上,生疼。

    起初我没太在意,直到一阵横风猛地从右侧袭来——车身像被一只看不见的巨手推了一把,整辆车连人带车滑出去半米。我下意识地攥紧刹车,双脚撑地,心脏在胸腔里狠狠撞了一下。

    风没有停的意思。第二波来得更猛。

    我听见身后传来一声金属刮擦的巨响,回头一看——路边的工地围挡被风掀翻了一块,铁皮在地上翻滚着,砸中了一排停着的共享单车。那一刻我忽然意识到,这条路上没有任何遮挡。开阔的江面把风放大了无数倍,而我骑在两轮之上,毫无防护。

    又是一阵横风。这次车子晃得更厉害了,前轮开始发飘,我几乎控不住车把。脑子里闪过一个念头:如果这时候后面有车跟得太近——我不敢往下想。只能拼命压低重心,双腿夹紧车身,像抱住最后一块浮木那样死死抓住车把。

    风从耳边呼啸而过,带着尖锐的口哨声。我的手掌全是汗,心跳声盖过了风声。每一秒都在想,下一阵风会不会把我掀到机动车道上去。

    终于,我看到了前方的公交站台——一个可以避风的角落。我几乎是滑着把车溜过去的,腿已经软了。停在站台后面,我弯腰撑着膝盖,大口喘气。

    回头望去,江面上白浪翻涌,风还在肆虐。我拍了拍车座,像是拍一个劫后余生的老伙计。

    那一刻,我对自然之力有了新的认识——有些力量你无法抗衡,只能躲避。而在避风的站台后面站着的那一刻,活着的感觉,格外真实。