哪些实用脚本能提升Git操作效率?

wen 实用脚本 3

本文目录导读:

哪些实用脚本能提升Git操作效率?

  1. Git 别名(最常用,直接提升日常速度)
  2. Shell 函数 / 脚本(增强 Git 命令)
  3. 自动化工作流脚本(适合团队或复杂项目)
  4. 错误修复与恢复类
  5. 安装与使用建议
  6. 效率提升对比(示例)

Git 别名(最常用,直接提升日常速度)

添加到 ~/.gitconfig[alias] 部分。

[alias]
    # 1. 超简日志(一行显示)
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
    # 2. 查看所有分支及最后提交
    branches = branch -a -v
    # 3. 删除已合并的本地分支(安全清理)
    # 用法:git cleanup
    cleanup = !git branch --merged | grep -v '\\*\\|master\\|main\\|develop' | xargs -n 1 git branch -d
    # 4. 撤销最近的commit但不丢失修改
    # 用法:git undo (等价于 git reset --soft HEAD~1)
    undo = reset --soft HEAD~1
    # 5. 查看当前状态摘要
    st = status -s
    # 6. 交互式变基最近n个commit
    # 用法:git rebase -i HEAD~n
    # 可进一步简化为:git rbi n
    ri = rebase -i
    # 7. 搜索所有分支中某个字符串
    # 用法:git find "string"
    find = "!f() { git log --all --oneline --grep \"$1\" ; }; f"
    # 8. 放弃工作区的所有未暂存修改(⚠️ 危险,确认后再用)
    discard = checkout -- .

Shell 函数 / 脚本(增强 Git 命令)

放入 ~/.bashrc~/.zshrcsource ~/.bashrc

快速切换分支(模糊匹配)

# 用法:gco feat → 自动切换到第一个包含feat的分支(本地或远程)
gco() {
    if [ -z "$1" ]; then
        git checkout
    else
        git checkout $(git branch -a | grep -v 'remotes/origin/HEAD' | grep "$1" | head -n 1 | tr -d ' ')
    fi
}

查看当前分支相对于远程的提交差异计数

# 用法:gcount → 输出 "当前分支领先远程3个commit,落后1个commit"
gcount() {
    local ahead=$(git rev-list --count origin/$(git_current_branch)..HEAD)
    local behind=$(git rev-list --count HEAD..origin/$(git_current_branch))
    echo "领先远程:$ahead 个commit,落后远程:$behind 个commit"
}
# 辅助函数(获取当前分支名)
git_current_branch() {
    git rev-parse --abbrev-ref HEAD
}

批量删除远程已合并的分支(安全)

# 用法:gclean-remote → 删除所有已经被合并到main的远程分支(不删除main、master)
gclean-remote() {
    git branch -r --merged origin/main | grep -v 'origin/main\|origin/master\|origin/HEAD' | sed 's/origin\///' | xargs -I {} git push origin --delete {}
}

自动解决冲突(谨慎使用,仅用于明确需求时)

# 用法:gresolve "their" → 所有冲突都采用传入分支的版本
# 若用 "ours" 则采用当前分支的版本
gresolve() {
    local strategy="${1:-their}"
    if [ "$strategy" = "their" ]; then
        git checkout --theirs .
    else
        git checkout --ours .
    fi
    git add -A
    echo "冲突已自动标记为采用[$strategy]版,请检查后执行git commit"
}

自动化工作流脚本(适合团队或复杂项目)

自动拉取并合并多个仓库(monorepo 或多项目)

#!/bin/bash
# 文件名:gup-all.sh
# 用法:放在project目录下,执行 ./gup-all.sh
for dir in */; do
    if [ -d "$dir/.git" ]; then
        echo "=== 正在更新 $dir ==="
        cd "$dir" && git pull --rebase && cd ..
    fi
done

一键创建功能分支并推送到远程

# 用法:gnew feat/user-login
gnew() {
    if [ -z "$1" ]; then
        echo "请提供分支名,gnew hotfix/typo"
        return 1
    fi
    git checkout -b "$1"
    git push -u origin "$1"
    echo "已创建并推送分支 $1"
}

查找并删除大文件(胖仓库清理)

# 用法:gfind-large size=10M → 查找并列出大于10MB的文件
gfind-large() {
    local size="${1:-10M}"
    git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | awk '$2 >= '"$(echo $size | sed 's/M//')"' * 1048576' | sort -n -k2 | tail -10
}

错误修复与恢复类

还原某个文件到指定commit的版本

# 用法:grevert-file abc123 src/index.js
grevert-file() {
    if [ -z "$1" ] || [ -z "$2" ]; then
        echo "用法:grevert-file <commit-hash> <filename>"
        return 1
    fi
    git checkout "$1" -- "$2"
}

交互式整理本地分支(选择删除)

# 用法:gclean-interactive
gclean-interactive() {
    git branch | grep -v 'main\|master\|*' | while read branch; do
        echo -n "删除分支 '$branch' ? (y/N): "
        read -r answer
        if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
            git branch -D "$branch" && echo "已删除 $branch"
        else
            echo "跳过 $branch"
        fi
    done
}

安装与使用建议

  1. 别名:直接粘贴到 ~/.gitconfig[alias] 下。
  2. Shell函数:追加到 ~/.bashrc~/.zshrc,然后执行 source ~/.bashrc
  3. 独立脚本:保存为文件(如 gnew.sh),放到 ~/bin/chmod +x,确保该目录在 PATH 中。
  4. 防止误操作:对于删除、强制推送等操作,建议先在 echo 模式下测试一次,或添加确认提示。

效率提升对比(示例)

操作 原生命令 加上别名/脚本 节省操作
查看漂亮日志 git log --graph --oneline --all git lg 减少约20个字符
撤销上次commit git reset --soft HEAD~1 git undo 无脑反向思维
清理本地陈旧分支 git branch --merged \| grep -v master \| xargs git branch -d git cleanup 单条命令搞定
创建并推送分支 git checkout -b feat/a && git push -u origin feat/a gnew feat/a 两步变一步

抱歉,评论功能暂时关闭!