#!/usr/bin/env sh

if ! exist git; then
  return 1
fi

# git alias

alias g='git'

alias ga='git add'
alias gaa='git add --all'
alias gai='git add -i'
alias gb='git branch'
alias gbd='git branch -d'

alias gc='git commit -v'
alias gc!='git commit -v --amend'
alias gcn!='git commit -v --no-edit --amend'

alias gcm='git checkout master'
alias gcd='git checkout develop'
alias gcb='git checkout -b'
alias gco='git checkout'

alias gd='git diff'
alias gds='git diff --staged'

alias gi='git ignore'

# show last committed content
alias gll='git last'
# show quick log overview
alias glg='git log --oneline --decorate --graph'
alias glga='git log --oneline --decorate --graph --remotes --all'
# 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 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'

alias gst='git status'

# if git is at least version 2.13, we can use git stash push
# in shells other than zsh, simply fall back to save
case "$(ps -cp "$$" -o command="")" in
*zsh*)
  autoload -Uz is-at-least
  if is-at-least 2.13 "$(git --version 2>/dev/null | awk '{print $3}')"; then
    alias gsta='git stash push'
  else
    alias gsta='git stash save'
  fi
  ;;
*) alias gsta='git stash save' ;;
esac
alias gstp='git stash pop'
alias gstl='git stash list'
alias gstL='git stash list --stat'