Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
xonsh aliases
#!/usr/bin/env xonsh
from packaging import version as ver
# Git version checking
git_version = $(git version 2>/dev/null).split()[2]
#
# Functions
#
# Pretty log messages
def _git_log_prettily():
if len($ARGS > 1):
git log --pretty=$ARG1
# Warn if the current branch is a WIP
def work_in_progress():
if $(git log -n 1 2>/dev/null | grep -q -c "\\-\\-wip\\-\\-"):
echo "WIP!!"
# Check if main exists and use instead of master
def git_main_branch():
if !(git rev-parse --git-dir &>/dev/null).returncode != 0:
return
for branch in ["master", "main", "trunk"]:
if !(git show-ref -q --verify refs/heads/@(branch)).returncode == 0:
return branch
#
# Aliases
# (sorted alphabetically)
#
my_aliases = {
"ip": "ip -c",
"g": "git",
"ga": "git add",
"gaa": "git add --all",
"gapa": "git add --patch",
"gau": "git add --update",
"gav": "git add --verbose",
"gap": "git apply",
"gapt": "git apply --3way",
"gb": "git branch",
"gba": "git branch -a",
"gbd": "git branch -d",
"gbda": 'git branch --no-color --merged | command grep -vE "^(\\+|\\*|\\s*($(git_main_branch)|development|develop|devel|dev)\\s*$)" | command xargs -n 1 git branch -d',
"gbD": "git branch -D",
"gbl": "git blame -b -w",
"gbnm": "git branch --no-merged",
"gbr": "git branch --remote",
"gbs": "git bisect",
"gbsb": "git bisect bad",
"gbsg": "git bisect good",
"gbsr": "git bisect reset",
"gbss": "git bisect start",
"gc": "git commit -v",
"gc^": "git commit -v --amend",
"gcn^": "git commit -v --no-edit --amend",
"gca": "git commit -v -a",
"gca^": "git commit -v -a --amend",
"gcan^": "git commit -v -a --no-edit --amend",
"gcans^": "git commit -v -a -s --no-edit --amend",
"gcam": "git commit -a -m",
"gcsm": "git commit -s -m",
"gcb": "git checkout -b",
"gcf": "git config --list",
"gcl": "git clone --recurse-submodules",
"gclean": "git clean -id",
"gpristine": "git reset --hard && git clean -dffx",
"gcm": "git checkout $(git_main_branch)",
"gcd": "git checkout develop",
"gcmsg": "git commit -m",
"gco": "git checkout",
"gcount": "git shortlog -sn",
"gcp": "git cherry-pick",
"gcpa": "git cherry-pick --abort",
"gcpc": "git cherry-pick --continue",
"gcs": "git commit -S",
"gd": "git diff",
"gdca": "git diff --cached",
"gdcw": "git diff --cached --word-diff",
"gdct": "git describe --tags $(git rev-list --tags --max-count=1)",
"gds": "git diff --staged",
"gdt": "git diff-tree --no-commit-id --name-only -r",
"gdw": "git diff --word-diff",
}
def gdnolock(args, stdin=None):
git diff @(args) ":(exclude)package-lock.json" ":(exclude)*.lock"
def gdv(args, stdin=None):
if len(args) == 0:
return
git diff -w @(args) | view -
my_aliases |= {
"gdv": gdv,
"gdnolock": gdnolock,
"gf": "git fetch"
}
if ver.parse(git_version)>=ver.parse("2.8"):
my_aliases["gfa"] = "git fetch --all --prune --jobs=10"
else:
my_aliases["gfa"] = "git fetch --all --prune"
my_aliases|= {
"gfo": "git fetch origin",
"gfg": "git ls-files | grep",
"gg": "git gui citool",
"gga": "git gui citool --amend",
}
"""
TODO:
function ggf() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force origin "${b:=$1}"
}
compdef _git ggf=git-checkout
function ggfl() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git push --force-with-lease origin "${b:=$1}"
}
compdef _git ggfl=git-checkout
function ggl() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git pull origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git pull origin "${b:=$1}"
fi
}
compdef _git ggl=git-checkout
function ggp() {
if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
git push origin "${*}"
else
[[ "$#" == 0 ]] && local b="$(git_current_branch)"
git push origin "${b:=$1}"
fi
}
compdef _git ggp=git-checkout
function ggpnp() {
if [[ "$#" == 0 ]]; then
ggl && ggp
else
ggl "${*}" && ggp "${*}"
fi
}
compdef _git ggpnp=git-checkout
function ggu() {
[[ "$#" != 1 ]] && local b="$(git_current_branch)"
git pull --rebase origin "${b:=$1}"
}
compdef _git ggu=git-checkout
"""
my_aliases |= {
"ggpur": "ggu",
"ggpull": 'git pull origin "$(git_current_branch)"',
"ggpush": 'git push origin "$(git_current_branch)"',
"ggsup": "git branch --set-upstream-to=origin/$(git_current_branch)",
"gpsup": "git push --set-upstream origin $(git_current_branch)",
"ghh": "git help",
"gignore": "git update-index --assume-unchanged",
"gignored": 'git ls-files -v | grep "^[[:lower:]]"',
"git-svn-dcommit-push": "git svn dcommit && git push github $(git_main_branch):svntrunk",
"gk": "\\gitk --all --branches",
"gke": "\\gitk --all $(git log -g --pretty=%h)",
"gl": "git pull",
"glg": "git log --stat",
"glgp": "git log --stat -p",
"glgg": "git log --graph",
"glgga": "git log --graph --decorate --all",
"glgm": "git log --graph --max-count=10",
"glo": "git log --oneline --decorate",
"glol": "git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'",
"glols": "git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --stat",
"glod": "git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'",
"glods": "git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short",
"glola": "git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --all",
"glog": "git log --oneline --decorate --graph",
"gloga": "git log --oneline --decorate --graph --all",
"glp": "_git_log_prettily",
"gm": "git merge",
"gmom": "git merge origin/$(git_main_branch)",
"gmt": "git mergetool --no-prompt",
"gmtvim": "git mergetool --no-prompt --tool=vimdiff",
"gmum": "git merge upstream/$(git_main_branch)",
"gma": "git merge --abort",
"gp": "git push",
"gpd": "git push --dry-run",
"gpf": "git push --force-with-lease",
"gpf^": "git push --force",
"gpoat": "git push origin --all && git push origin --tags",
"gpu": "git push upstream",
"gpv": "git push -v",
"gr": "git remote",
"gra": "git remote add",
"grb": "git rebase",
"grba": "git rebase --abort",
"grbc": "git rebase --continue",
"grbd": "git rebase develop",
"grbi": "git rebase -i",
"grbm": "git rebase $(git_main_branch)",
"grbs": "git rebase --skip",
"grev": "git revert",
"grh": "git reset",
"grhh": "git reset --hard",
"groh": "git reset origin/$(git_current_branch) --hard",
"grm": "git rm",
"grmc": "git rm --cached",
"grmv": "git remote rename",
"grrm": "git remote remove",
"grs": "git restore",
"grset": "git remote set-url",
"grss": "git restore --source",
"grst": "git restore --staged",
"grt": 'cd "$(git rev-parse --show-toplevel || echo .)"',
"gru": "git reset --",
"grup": "git remote update",
"grv": "git remote -v",
"gsb": "git status -sb",
"gsd": "git svn dcommit",
"gsh": "git show",
"gsi": "git submodule init",
"gsps": "git show --pretty=short --show-signature",
"gsr": "git svn rebase",
"gss": "git status -s",
"gst": "git status",
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment