Skip to content

Instantly share code, notes, and snippets.

@putermancer
Last active June 15, 2022 08:37
Show Gist options
  • Save putermancer/841286 to your computer and use it in GitHub Desktop.
Save putermancer/841286 to your computer and use it in GitHub Desktop.
git aliases
[alias]
unadd = reset HEAD
co = checkout
cp = cherry-pick
st = status
stat = status
br = branch
info = "!sh -c '[ $# -ne 0 ] && git remote show $1 && exit 0 || [ $# = 0 ] && git remote show origin && exit 0' -"
track = "!sh -c '[ $# = 2 ] && git branch --track \"$1\" \"$2\" && exit 0 || [ $# = 1 ] && git branch --track \"$1\" origin/\"$1\" && exit 0 || echo \"usage: git track <branch> [remote_branch]\\n\\nIf remote branch is not specified, the default is to use origin/<branch>\" && exit 1' -"
flush = "!git clean -dxf && git remote prune origin && git gc"
# The below are courtesy of bobthecow
sup = !git submodule sync && git submodule update --init --recursive
whois = "!sh -c 'git log -i -1 --pretty=\"format:%an <%ae>\n\" --author=\"$1\"' -"
whatis = show -s --pretty='tformat:%h (%s, %ad)' --date=short
this = !git init && git add . && git commit -m \"initial commit\"
ls = "!git status -suno"
ls-modified = "!git status --porcelain -uno | awk 'match($1, /M/) {print $2}'"
ls-added = "!git status --porcelain -uno | awk 'match($1, /A/) {print $2}'"
ls-deleted = "!git status --porcelain -uno | awk 'match($1, /D/) {print $2}'"
ls-renamed = "!git status --porcelain -uno | awk 'match($1, /R/) {print $2}'"
ls-copied = "!git status --porcelain -uno | awk 'match($1, /C/) {print $2}'"
ls-updated = "!git status --porcelain -uno | awk 'match($1, /U/) {print $2}'"
ls-untracked = "!git status --porcelain -uall | awk '$1 == \"??\" {print $2}'"
alias = "!sh -c '[ $# = 2 ] && git config --global alias.\"$1\" \"$2\" && exit 0 || [ $# = 1 ] && [ $1 = \"--list\" ] && git config --list | grep \"alias\\.\" | sed \"s/^alias\\.\\([^=]*\\)=\\(.*\\).*/\\1@@@@=>@@@@\\2/\" | sort | column -ts \"@@@@\" && exit 0 || echo \"usage: git alias <new alias> <original command>\\n git alias --list\" >&2 && exit 1' -"
ignore = "!sh -c '([ $# = 2 ] && ([ \"$1\" = \"--local\" ] && echo \"$2\" >> \"./$(git rev-parse --show-cdup)/.git/info/exclude\" || ([ \"$2\" = \"--local\" ] && echo \"$1\" >> \"./$(git rev-parse --show-cdup)/.git/info/exclude\"))) || ([ $# = 1 ] && (([ \"$1\" == \"--list\" ] && git ls-files -i --exclude-standard) || (([ ! -e .gitignore ] && touch .gitignore || echo \"$(cat .gitignore)\" > .gitignore) && echo \"$1\" >> .gitignore))) || echo \"usage: git ignore <file>\\n git ignore --local <file>\\n git ignore --list\" >&2 && exit 1' -"
@taxilian
Copy link

Worth adding to this gist our PS1 that shows the current branch. Mine is export PS1="[\e[0;32m]\u[\e[m][\e[1;33m]@[\e[m][\e[1;32m]\h[\e[m][\e[0;33m]:[\e[m][\e[1;37m]\w[\e[m] [\e[0;35m]$(git branch 2> /dev/null | grep -e '* ' | sed 's/^..(.*)/{\1} /')$ [\e[m]"

note that this makes the branch name purple... I actually kinda like that. you could play with it, though

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