本文目录导读:

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 或 ~/.zshrc,source ~/.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
}
安装与使用建议
- 别名:直接粘贴到
~/.gitconfig的[alias]下。 - Shell函数:追加到
~/.bashrc或~/.zshrc,然后执行source ~/.bashrc。 - 独立脚本:保存为文件(如
gnew.sh),放到~/bin/并chmod +x,确保该目录在PATH中。 - 防止误操作:对于删除、强制推送等操作,建议先在
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 |
两步变一步 |
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播