Skip to content

Instantly share code, notes, and snippets.

@agarzola
Forked from mcjim/.bashrc
Last active October 7, 2018 20:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agarzola/49b64ca3a176a821228b to your computer and use it in GitHub Desktop.
Save agarzola/49b64ca3a176a821228b to your computer and use it in GitHub Desktop.
Git branch, dirty and stash state in Bash prompt.
# Tweak presentation and add commits ahead/behind.
# Quick fork by @mcjim to add stash status and tweak to suit his style.
# http://henrik.nyh.se/2008/12/git-dirty-prompt
# http://www.simplisticcomplexity.com/2008/03/13/show-your-git-branch-name-in-your-prompt/
# host dir master $ # clean working directory
# host dir master* $ # dirty working directory
# host dir master*^ $ # dirty working directory with stash
# host dir master^ $ # clean working directory with stash
function parse_git_dirty {
status=$(git status --porcelain -b 2> /dev/null)
aheadRegex="ahead ([0-9]+)"
behindRegex="behind ([0-9]+)"
[[ $status =~ $aheadRegex ]] && ahead="${BASH_REMATCH[1]}" || ahead="0"
[[ $status =~ $behindRegex ]] && behind="${BASH_REMATCH[1]}" || behind="0"
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working directory clean" ]] && echo -n ", dirty"
[[ $ahead != "0" ]] && echo -n ", ↑${ahead}"
[[ $behind != "0" ]] && echo -n ", ↓${behind}"
}
function parse_git_stash {
[[ $(git stash list 2> /dev/null | tail -n1) != "" ]] && echo " \/ stash"
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty)$(parse_git_stash)/"
}
PS1='\[\e[0;33m\]${HOSTNAME}\[\e[m\] | \W | \[\e[0;36m\]$(parse_git_branch)\[\e[m\]\n${USER} $ '
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment