#!/usr/bin/env sh if ! exist git; then return 1 fi # print git version output and get raw version number by stripping prefix git_version=$(git --version 2>/dev/null) git_version="${git_version##git version }" alias g='git' if exist lazygit; then alias lg="lazygit" fi alias ga='git add' alias gaa='git add --all' alias gai='git add -i' alias gc='git commit -v' alias gc!='git commit -v --amend' alias gcn!='git commit -v --no-edit --amend' if version_at_least 2.23 "$git_version"; then alias gcm='git switch master 2>/dev/null || git switch main' alias gcd='git switch develop 2>/dev/null || git switch staging' gcb() { git switch "$@" 2>/dev/null || git switch -c "$@" } else alias gcm='git checkout master 2>/dev/null || git checkout main' alias gcd='git checkout develop' alias gcb='git checkout -b' fi alias gco='git checkout' alias gi='git ignore' # normal diff alias gd='git diff' alias gds='git diff --staged' # word-based diff (with custom word regex) alias gdw='git diffword' alias gdws='git diffword --staged' # side-by-side diff alias gdd='git diffside' alias gdds='git diffside --staged' # syntax-based diff if exist difft; then alias gdy='git diffsyn' alias gdys='git diffsyn --staged' fi alias gdd='git diffside' alias gdds='git diffside --staged' # show last committed content alias gdl='git last' # show quick log overview alias glg='git log --oneline --decorate --graph' alias glga='git log --oneline --decorate --graph --remotes --all' # show quick log overview - with dates alias glgd="git log --graph --pretty=format:'%C(auto)%h%Creset %C(cyan)%ar%Creset%C(auto)%d%Creset %s'" alias glgad="git log --graph --remotes --all --pretty=format:'%C(auto)%h%Creset %C(cyan)%ar%Creset%C(auto)%d%Creset %s'" # show detailed log overview alias glog='git log --stat' # show detailed log overview with contents alias gloog='git log --stat -p' alias gf='git fetch' alias gfa='git fetchall' alias gl='git pull' alias gpn='git push --dry-run' alias gp='git push' alias gpf!='git push --force' alias gpm='git pushmerge' alias gpa='git pushall' alias grv='git remote -v' alias grs='git restore --staged' alias grs!='git restore' alias grb='git rebase' alias grbi='git rebase -i' alias grbc='git rebase --continue' alias grbm='git rebase master || git rebase main' alias gst='git status' alias gstp='git stash pop' alias gstl='git stash list' alias gstL='git stash list --stat' if version_at_least 2.13 "$git_version"; then alias gsta='git stash push' else alias gsta='git stash save' fi if exist git-bug; then # POSIX-compliant version of . <(cmd) substitution # shellcheck source=/dev/null # but shellcheck can't access git-bug completion zsh | . /dev/fd/0 alias gbt='git-bug termui' alias gb="git-bug bug" alias gbw="git-bug bug show" alias gbn='git-bug bug new' alias gbm='git-bug bug comment new' alias gbte='git-bug bug title edit' # TODO: Implement toggle function # grab current status and then open or close accordingly alias gbo='git-bug bug status close' alias gbp='git-bug push' alias gbl='git-bug pull' alias gbu='git-bug user' # list users # show primary user info alias gbU='git-bug user user "$(git-bug user | cut -d" " -f1 | head -n1)"' fi unset -v git_version