Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 79 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save JuggoPop/10706934 to your computer and use it in GitHub Desktop.
Save JuggoPop/10706934 to your computer and use it in GitHub Desktop.
Git branch bash autocomplete *with aliases* (add to .bash_profile)
# To Setup:
# 1) Save the .git-completion.bash file found here:
# 2) Add the following lines to your .bash_profile, be sure to reload (for example: source ~/.bash_profile) for the changes to take effect:
# Git branch bash completion
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
# Add git completion to aliases
__git_complete g __git_main
__git_complete gc _git_checkout
__git_complete gm __git_merge
__git_complete gp _git_pull
# Make sure you actually have those aliases defined, of course.
alias g="git"
alias gc="git checkout"
alias gm="git merge"
alias gp="git pull"
Copy link

All of the common commands (the ones I alias) have only one leading underscore.

Copy link

Thanks for this!

Copy link

Thank you!

Copy link

Nice! Thanks!

Copy link

tucq88 commented Jul 20, 2016

Nice and clean. Tested & worked with Ubuntu 14.04

Copy link

worked :)

Copy link

zero-t4 commented May 11, 2017

how can i set alias like this pld = !git pull origin develop?

Copy link

tplk commented May 29, 2017

@zero-t4, add alias pld="!git pull origin develop" to your .bash_profile (or wherever you store your aliases).

Copy link

davich commented Jun 7, 2017

Awesome! Thanks

Copy link

bcuz commented Nov 22, 2017

Line 13 should be:

__git_complete gm _git_merge

One too many _ in the last part of it.

Copy link


Copy link

Yay!! Awesomenessss...

Copy link


Copy link

Thank you!

Copy link

The legend

Copy link

jnothman commented Aug 30, 2018

I've got a much longer list of aliases... Perhaps this helper is useful:

gitshort() {
	short=$1; shift
	long=$1; shift
	alias $short="git $long $@"
	__git_complete $short _git_$long


gitshort gc checkout
gitshort gcb checkout -b
gitshort gm merge
gitshort gp pull

Copy link

Another option: You can source this script after your aliases are created to automatically enable autocompletion for all of them.

Like so:

curl usr/local/etc/alias_completion
echo "source /usr/local/etc/alias_completion" >> ~/.bash_profile
source ~/.bash_profile

Copy link

The git-completion.bash file already exists on your system; you do not need to download it into your home directory.
On this system (Ubuntu 18.10):

if [ -r /usr/share/bash-completion/completions/git ] 
        .  /usr/share/bash-completion/completions/git
        __git_complete gco _git_checkout
        __git_complete gd _git_diff

alias gco='git checkout'
alias gs='git status'
alias gd='git diff'
alias gf='git fetch'
alias gst='git stash'
alias gsp='git stash pop'
alias gsl='git stash list'
alias gpoh='git push origin HEAD'
alias grom='git rebase origin/main'
alias gmom='git merge origin/main'
alias gfomm='git fetch origin main:main'
alias gcam='git commit -a -m'
alias gcaa='git commit -a --amend'
alias gcm='git commit -m'
alias glog="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"

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