• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hamsterbase
V2EX  ›  程序员

让 ai 重写了整个 git 的历史,强迫症被拯救了

  •  
  •   hamsterbase ·
    carytrivett · Apr 17 · 2363 views

    个人项目,不需要协作,所以才敢这么折腾。 今天翻 git log ,发现历史里一堆 "update"、"fix"、"改一下" 这种毫无信息量的 commit message ,看着就难受。于是让 AI 把所有这类"废话 message"挑出来,结合实际 diff 分析改动内容,重新生成了有意义的描述。担心它改错,顺手让它写了个批处理 bash 脚本:

    bash#!/usr/bin/env bash
    set -euo pipefail
    # 用法:./rewrite.sh [分支名] [--yes] [--dry-run]
    
    # 旧 commit hash -> 新 message
    declare -A MESSAGES=(
        ["69298b6141"]="chore(tasks): remove vendored tasks source"
        ["b3aaeff723"]="chore(claude): add local permissions config"
        ["032c032074"]="fix(testing): set mobile initial path"
        # ... 其他映射
    )
    
    # 解析参数
    TARGET="${1:-$(git branch --show-current)}"
    AUTO_YES=0
    DRY_RUN=0
    [[ "$*" =~ --yes ]] && AUTO_YES=1
    [[ "$*" =~ --dry-run ]] && DRY_RUN=1
    
    # 预览变更
    echo "目标分支: $TARGET"
    for commit in "${!MESSAGES[@]}"; do
        echo "  $commit -> ${MESSAGES[$commit]}"
    done
    
    # dry-run 模式
    if [ $DRY_RUN -eq 1 ]; then
        echo "干运行模式,不实际修改"
        exit 0
    fi
    
    # 二次确认
    if [ $AUTO_YES -eq 0 ]; then
        read -p "确认重写提交消息?[y/N] " -r
        [[ ! $REPLY =~ ^[Yy] ]] && exit 0
    fi
    
    # 自动备份
    BACKUP="backup-$(date +%Y%m%d-%H%M%S)"
    git branch "$BACKUP" "$TARGET"
    
    # 执行重写
    git filter-branch -f --msg-filter '
        case "$GIT_COMMIT" in
            '"$(for hash in "${!MESSAGES[@]}"; do
                echo "$hash) echo \"${MESSAGES[$hash]}\" ;;"
            done)"'
            *) cat ;;
        esac
    ' -- "$TARGET"
    
    echo "完成!备份分支: $BACKUP"
    echo "如需恢复: git reset --hard $BACKUP"跑完脚本,看着 git log 整整齐齐,莫名被治愈了。
    
    5 replies    2026-04-17 14:07:01 +08:00
    940i3s34v4F1HW41
        1
    940i3s34v4F1HW41  
    PRO
       Apr 17 via iPhone
    AI 马上要迎来奇点
    fds
        2
    fds  
       Apr 17
    git 的话直接在新分支改呗,改好 reset 过去就行。
    目前写 tests 这种脏活累活都交给 AI 了,非常爽。
    lel020
        3
    lel020  
       Apr 17
    确实 git 写的 commit log 比较赏心悦目,尤其对于英文不好又强迫自己使用英文的,哪怕纯 AI 不审核都比自己手写无意义 log 强得多,
    lulaolu
        4
    lulaolu  
       Apr 17
    个人项目的 commit message 可以让自己看一眼就知道改动内容,要的是熟悉; AI 写的虽然精致,但很陌生。当然无论如何都比完全无意义的 message 要强。

    自己写的简单 message > AI 写的精致 message > 完全无意义的 message 。
    dotfun
        5
    dotfun  
       Apr 17
    这都是你提交的偷的懒,本应该自己按照规范提交
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3146 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 15:00 · PVG 23:00 · LAX 08:00 · JFK 11:00
    ♥ Do have faith in what you're doing.