Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Git Aware Bash Prompt

In Terminal

mkdir ~/.bash

Copy the raw file from git contrib in to the ~/.bash directory:

Inside ~/.bashrc or ~/.bash_profile (choose the file where you normally put any bash customizations/setup), add the lines:

source ~/.bash/ # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on

As long as you're inside a git repo, your Bash prompt should now show the current git branch in color signifying if its got uncommitted changes.

Copy link

syscools commented Mar 7, 2017

works so far... Thanks.!

Copy link

jbrizbee commented Apr 7, 2017

Thanks! Working great for me

Copy link

karlpokus commented Aug 11, 2017

Thanks for sharing! These are pretty handy too

export GIT_PS1_SHOWUPSTREAM="auto"

Copy link

shairyar commented Sep 11, 2017

Thanks, works great.

Copy link

polaroidkidd commented Dec 1, 2017


Thanks! Works great so far. I've only one question.
When I use the provided my input in bash is on the next line as such

I've tried amending the but it still keeps happening. Do you happen to have an idea why that could be?


Found it! Had to remove the ´\n´ in export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "'

Copy link

rijans commented Jan 29, 2018

Thanks! Working

Copy link

midlan commented Feb 13, 2019

I use this:

# GIT bash integration
if [[ -e /usr/lib/git-core/git-sh-prompt ]]; then

        source /usr/lib/git-core/git-sh-prompt

        export GIT_PS1_SHOWCOLORHINTS=true
        export GIT_PS1_SHOWDIRTYSTATE=true
        export GIT_PS1_SHOWUNTRACKEDFILES=true
        export GIT_PS1_SHOWUPSTREAM="auto"
        # PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'

        # use existing PS1 settings
        PROMPT_COMMAND=$(sed -r 's|^(.+)(\\\$\s*)$|__git_ps1 "\1" "\2"|' <<< $PS1)


Copy link

kfcobrien commented Apr 7, 2019

Here is a simple clean version that I use: link

Copy link

fragmuffin commented May 23, 2019

I've been having fun with this the past few days commute to work...

export GIT_PS1_SHOWDIRTYSTATE=true      # staged '+', unstaged '*'
export GIT_PS1_SHOWUNTRACKEDFILES=true  # '%' untracked files
export GIT_PS1_SHOWUPSTREAM="auto"      # '<' behind, '>' ahead, '<>' diverged, '=' no difference
export GIT_PS1_SHOWSTASHSTATE=true      # '$' something is stashed

function __prompt_command() {
    local ERRORCODE="$?"

    # Errorcode (conditional)
    if [ ${ERRORCODE} != 0 ]; then
        PS1+="\e[90m    $(echo -e '\u2570\u2500\u2770')\e[1;31m$ERRORCODE\e[90m$(echo -e '\u2771')\e[0m\n"

    # Main line
    local c="$(echo -e '\u256d\u2500')"
    if [[ "$(dirs -p | wc -l)" != "1" ]] ; then
        local c="$(echo -e '\u2934') "
    if [[ ! -z "${VIRTUAL_ENV}" ]]; then
        PS1+="\e[90m$(echo -e '\u2770')\e[32m$(basename $VIRTUAL_ENV)\e[90m$(echo -e '\u2771')\e[0m"
    PS1+=" \e[33;1m\w\e[m"

    # Command Line
    PS1+="\n\e[90m$(echo -e '\u2570\u2500\u2bc8') \e[0m"

export PROMPT_COMMAND=__prompt_command

results in:

Copy link

hky404 commented Jun 26, 2019

why does this remove my actual directory path along with my virtualenv name, now I am only left with $ in my prompt. any way to fix it?

Copy link

AlexRuizE commented Jan 14, 2020

works great!

Copy link

alfredoh1234 commented Mar 3, 2020

Very happy with it!

Copy link

wangyu-okta commented Nov 24, 2020

This has worked well for a while, until recently when it significantly slows down everything - eg, when I "more PATH/TO/any-file", then "q" to quit - the quitting takes 5 seconds!!! Everything starts to take long.
It might not be the issue with this tool itself - but I do not have to have my prompt show me the GIT info. Hence I just disabled it :(

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment