改.bashrc,直观地判断本地repo是否有改动

preface

添加到.bashrc末尾

bash 复制代码
# ==================== Git 增强提示符 ====================              yan add may18
git_prompt() {
    if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
        return
    fi

    local git_root
    git_root=$(git rev-parse --show-toplevel 2>/dev/null)

    # 如果 HOME 本身是 git 仓库,则不显示,避免到处都有提示
    if [ "$git_root" = "$HOME" ]; then
        return
    fi

    local branch
    branch=$(git branch --show-current 2>/dev/null)

    if [ -z "$branch" ]; then
        branch="detached"
    fi

    local ahead=0
    local behind=0

    # 如果当前分支设置了 upstream,比如 origin/main
    if git rev-parse --abbrev-ref --symbolic-full-name @{u} >/dev/null 2>&1; then
        ahead=$(git rev-list --count @{u}..HEAD 2>/dev/null || echo 0)
        behind=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo 0)
    fi

    local dirty
    dirty=$(git status --porcelain 2>/dev/null | wc -l)

    local cyan=$'\001\033[1;36m\002'
    local red=$'\001\033[31m\002'
    local yellow=$'\001\033[33m\002'
    local reset=$'\001\033[0m\002'

    local info="(${cyan}${branch}${reset}"

    if [ "$dirty" -gt 0 ]; then
        info+=" ${red}⚡${reset}"
    fi

    if [ "$ahead" -gt 0 ]; then
        info+=" ${yellow}↑${ahead}${reset}"
    fi

    if [ "$behind" -gt 0 ]; then
        info+=" ${red}↓${behind}${reset}"
    fi

    info+=")"

    printf " %s" "$info"
}

PS1='\u@\h:\w$(git_prompt) \$ '

一、解释脚本

1. ahead / behind 判断本地和远程repo版本

bash 复制代码
ahead=$(git rev-list --count HEAD..origin/"$branch" 2>/dev/null || echo 0)
behind=$(git rev-list --count origin/"$branch"..HEAD 2>/dev/null || echo 0)

含义是:

bash 复制代码
HEAD..origin/branch        # 远程有、本地没有 => 本地落后 behind
origin/branch..HEAD        # 本地有、远程没有 => 本地超前 ahead

2. 颜色代码

在 Bash 里,用:

bash 复制代码
$'\033[1;36m'

或者:

bash 复制代码
$'\e[1;36m'

可以显示颜色,更直观


二、更新.bashrc

然后执行:

bash 复制代码
source ~/.bashrc

显示效果大概是

如果你在 main 分支,本地比远程多 2 个提交:

bash 复制代码
ubuntu@:~/(main ↑2) $

如果本地落后远程 3 个提交:

bash 复制代码
ubuntu@:~/(main ↓3) $

如果有未提交修改:

bash 复制代码
ubuntu@:~/(main ⚡) $

如果既有修改,又超前又落后:

bash 复制代码
ubuntu@:~/(main ⚡ ↑1 ↓2) $

额外检查一下 upstream

如果你发现一直不显示 ,可能是当前分支没有绑定远程分支。

进入项目目录后执行:

bash 复制代码
git branch -vv

如果看不到类似:

bash 复制代码
main abc1234 [origin/main] commit message

那就绑定一下:

bash 复制代码
git branch --set-upstream-to=origin/main main

或者首次推送时:

bash 复制代码
git push -u origin main

一、

相关推荐
ShineWinsu11 分钟前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket
无足鸟ICT1 小时前
【RHCA+】查看变量
linux·运维·服务器
Kina_C1 小时前
Linux DNS 服务器-从高速缓存到辅助 DNS 部署指南
linux·运维·服务器·dns
EasyGBS1 小时前
ONVIF设备接入国标GB28181视频平台EasyGBS:不用国标也能一键拉流!
服务器·php·音视频
suaizai_1 小时前
TypeScript 7 正式发布!Vue 暂被 “拒之门外“ !!!
linux·运维·ubuntu
小小代码狗2 小时前
SQLi-Labs 基础注入实战教程(Less-1 ~ Less-5and Less-9)
服务器·python·php
慕伏白2 小时前
【慕伏白】Linux 系统如何根据端口号关闭进程
linux·运维·服务器
letisgo52 小时前
VMware Workstation + Ubuntu 26.04 LTS 小白运维部署手册
linux·运维·ubuntu
蓝创工坊Blue Foundry3 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel
IT探索3 小时前
Linux 查找文件指令总结
linux·算法