Git Bash 提示符简化(就是每次敲命令时上面显示的那一行信息)

Git Bash 提示符简化

1、背景

在 Git Bash 启动后,命令输入前显示的这一段专业上通常叫 Shell prompt,在 Bash 环境中也可以叫 Bash prompt 或"命令提示符"。默认提示符通常类似下面这样:

bash 复制代码
Alice@DESKTOP-ABC123 MINGW64 /xxx/xxx/xxx
$

其中:

  • Alice 是当前用户名。
  • DESKTOP-ABC123 是主机名。
  • MINGW64 表示当前 Git Bash / MinGW 环境。
  • /xxx/xxx/xxx 是当前所在路径。
  • 如果当前目录是 Git 仓库,默认提示符还会在路径后显示当前 Git 分支,例如 (main)
    • 比如:Alice@DESKTOP-ABC123 MINGW64 /xxx/xxx/xxx (main)

需求是简化提示符,去掉较长且日常使用价值不高的 主机名MINGW64,保留更关心的信息:

bash 复制代码
Alice /xxx/xxx/xxx
$

最终目标是在 Git 仓库目录下同时保留当前分支显示:

bash 复制代码
Alice /xxx/xxx/xxx (main)
$

非 Git 仓库目录下则保持为:

bash 复制代码
Alice /xxx/xxx/xxx
$

2、解决方案

最终是在用户目录下的 Git Bash 启动配置文件中追加自定义 PS1 配置:

bash 复制代码
# Custom Git Bash prompt: user path + Git branch
if ! type __git_ps1 >/dev/null 2>&1; then
  test -f /etc/profile.d/git-prompt.sh && . /etc/profile.d/git-prompt.sh
fi

if type __git_ps1 >/dev/null 2>&1; then
  PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]\[\033[32m\]\u \[\033[33m\]\w\[\033[36m\]$(__git_ps1 " (%s)")\[\033[0m\]
$ '
else
  PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]\[\033[32m\]\u \[\033[33m\]\w\[\033[0m\]
$ '
fi

该配置写入的位置是:

text 复制代码
C:\Users\Alice\.bashrc

同时确认了:

bash 复制代码
C:\Users\Alice\.bash_profile

会加载 .bashrc

bash 复制代码
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

因此重新打开 Git Bash,或者在已打开的 Git Bash 中执行下面命令即可生效:

bash 复制代码
source ~/.bashrc

3、分析

3.1 为什么修改 .bashrc

Git Bash 启动时会读取用户目录下的启动配置文件。当前机器上的 .bash_profile 已经包含:

bash 复制代码
test -f ~/.bashrc && . ~/.bashrc

这表示如果 ~/.bashrc 存在,就加载它。因此把提示符配置写在 .bashrc 中,可以在每次打开 Git Bash 时自动生效。

3.2 PS1 是什么

PS1 是 Bash 的主提示符变量,其中 PS 可以理解为 prompt string。终端里每次等待输入命令时,前面显示的 Shell prompt / Bash prompt 内容就是由 PS1 控制的。

例如:

bash 复制代码
PS1='\u \w
$ '

大致表示:

  • \u:显示当前用户名,例如 Alice
  • \w:显示当前路径。
  • 换行后显示 $ ,作为输入命令的位置。

3.3 为什么要显式处理 Git 分支

Git Bash 提示符中的分支信息不是 Bash 自动提供的,而是依赖 Git 提供的辅助函数 __git_ps1。因此自定义 PS1 时,如果希望继续显示当前 Git 分支,就需要在提示符中显式调用这个函数。

3.4 __git_ps1 的作用

__git_ps1 是 Git prompt 脚本提供的函数,用来在当前目录是 Git 仓库时输出分支信息。

配置中使用了:

bash 复制代码
$(__git_ps1 " (%s)")

含义是:

  • 如果当前目录是 Git 仓库,则输出当前分支。
  • " (%s)" 是输出格式,%s 会被替换为分支名。
  • 当前分支为 main 时,输出结果是 (main)
  • 前面的空格用于让路径和分支之间有间隔。

所以最终效果类似:

bash 复制代码
Alice ~/project (main)
$

3.5 为什么要先检查 __git_ps1

配置中有两次检查:

bash 复制代码
if ! type __git_ps1 >/dev/null 2>&1; then
  test -f /etc/profile.d/git-prompt.sh && . /etc/profile.d/git-prompt.sh
fi

第一段表示:如果当前 Shell 还没有 __git_ps1 函数,就尝试加载 Git Bash 自带的 prompt 脚本:

bash 复制代码
/etc/profile.d/git-prompt.sh

随后再次检查:

bash 复制代码
if type __git_ps1 >/dev/null 2>&1; then

这是为了确认加载是否成功。

如果 __git_ps1 可用,就使用带 Git 分支的提示符;如果不可用,就退回到只显示用户名和路径的提示符。这样即使某些环境下 Git prompt 脚本不存在,Git Bash 也不会报错。

3.6 颜色和终端标题控制

配置中的这些内容用于颜色和终端标题:

bash 复制代码
\[\033]0;$TITLEPREFIX:$PWD\007\]
\[\033[32m\]
\[\033[33m\]
\[\033[36m\]
\[\033[0m\]

含义大致是:

  • \[\033]0;$TITLEPREFIX:$PWD\007\]:保留 Git Bash 原有的窗口标题更新行为。
  • \[\033[32m\]:后续文本显示为绿色。
  • \[\033[33m\]:后续文本显示为黄色。
  • \[\033[36m\]:后续文本显示为青色。
  • \[\033[0m\]:重置颜色,避免输入的命令继续继承提示符颜色。

外层的 \[\] 用于告诉 Bash:这些是不可见的控制字符,不应该计入提示符宽度。这样可以避免光标位置、换行、退格等行为出错。

4、参考

本次操作主要参考了当前机器上的实际配置和 Git Bash 自带行为:

  • C:\Users\Alice\.bashrc:最终写入自定义提示符配置的位置。
  • C:\Users\Alice\.bash_profile:确认 Git Bash 启动时会加载 .bashrc
  • /etc/profile.d/git-prompt.sh:Git Bash 中提供 __git_ps1 函数的 prompt 脚本。
  • Git Bash 的 bash.exe 路径:本机实际使用的 Git Bash 可执行文件路径,用于验证配置加载。
相关推荐
我叫张小白。3 小时前
PyCharm 集成 Git 与 Gitee
git·pycharm·gitee
小雨青年3 小时前
Git Bisect 实战:用二分法快速找到引入 Bug 的提交
git·bug
一只大袋鼠4 小时前
Git (三):Tag 标签管理、图形工具、IDEA 集成与 GitLab 私有化部署
开发语言·git·gitlab
十子木4 小时前
git 如何恢复特定版本的内容
linux·git
龚礼鹏4 小时前
git相关操作
git
x-cmd4 小时前
[260520] x-cmd v0.9.5:x install 支持 skill 安装,新增 git ci 命令让 AI 帮你写 commit
人工智能·git·ci/cd·agent·install·x-cmd
奶油松果4 小时前
更新本地git地址
git
z200509305 小时前
【linux学习】在linux下使用git提交到gitee
git·学习·gitee
C137的本贾尼20 小时前
Git基本操作(四):删除文件
git