# Git push. function gps() { git push "${@}" } # Git push all (branches). Useful for pushing all stuff to a new remote. function gpsa() { git push "${1}" --tags "refs/remotes/origin/*:refs/heads/*" } # Git force push. function gpsf() { git push --force "${@}" } # Git pull. function gpl() { git pull "${@}" } # Git log. function gl() { git log "${@}" } # Git status. function gs() { git status "${@}" } # Git stash. function gst() { git stash "${@}" } # Git diff. function gd() { git diff "${@}" } # Git commit. function gc() { git commit -m "${@}" } # Git checkout. function gch() { git checkout "${@}" } # Git checkout branch. # Usage: gchb function gchb() { git checkout -b "${@}" } # Git branch. function gb() { git branch --all "${@}" } # Git branch delete. # Usage: gbd function gbd() { git branch -D "${@}" } # Git branch delete all except current. function gbda() { git branch | grep -v ^* | xargs git branch -D } # Git fetch all. function gf() { git fetch --all -v -p } # Git tag. function gt() { git tag "${@}" } # Git ignore files. function gi() { git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached } # Git patch create. # Usage: gpc function gpc() { git diff > "${@}" } # Git patch (apply). # Usage: gp function gp() { git apply "${@}" } # Run git garbage collection. function ggc() { git gc --aggressive --no-cruft --prune=now } # Preview diff while adding. Adds current dir by default. # Usage: ga [FILES] function ga() { local target=${@} if [[ "${target}" = "" ]]; then target="." fi git diff ${target} git add ${target} } # Rebase by X commits or from root. When COUNT is 0 - rebase from root. Default is 2. # Usage: gr [COMMIT COUNT] function gr() { local base="${1}" # rebase last 2 commits by default. if [[ "${base}" = "" ]]; then base="2" fi # if 0, rebase from root. else from specified base. if [[ "${base}" = "0" ]]; then git rebase -i --root else git rebase -i HEAD~${base} fi } # Specify git user as Dmitry Voronin with provided email. # Usage: gu [EMAIL] function gu() { local name="Dmitry Voronin" local email="${1}" if [[ "${name}" = "" || "${email}" = "" ]]; then echo "usage: gu [EMAIL]" return 2 fi git config user.name "${name}" git config user.email "${email}" } # Get my git repo. # Usage: gg function gg() { local repo="${1}" if [[ "${repo}" = "" ]]; then help gg return 2 fi git clone https://git.voronind.com/voronind/"${repo}" } # See diff for a specific commit. # Usage: gdc function gdc() { git diff "${1}^!" } # Get version number based on commit count. function gv() { git rev-list HEAD --count } # Show current branch. function _git_current_branch() { git branch --show-current 2> /dev/null } # Show origin's url. function _git_origin_url() { git remote get-url origin } # Get this dotfiles url. function _git_dotfiles_url() { echo 'https://git.voronind.com/voronind/linux.git' } # Check if current git repo is this dotfiles. function _git_is_dotfiles() { # [[ "$(_git_origin_url)" = "$(_git_dotfiles_url)" ]] local dir="${PWD}" while [[ "${dir}" != "" ]]; do if [[ -d "${dir}/.git" ]]; then if [[ "${dir}" = "${HOME}" ]] || [[ "${dir}" = "$(realpath ${HOME})" ]]; then return 0 else return 1 fi fi dir="${dir%/*}" done } # autocomplete. _completion_loader git &> /dev/null __git_complete gps _git_push &> /dev/null __git_complete gpsf _git_push &> /dev/null __git_complete gpl _git_pull &> /dev/null __git_complete gl _git_log &> /dev/null __git_complete gs _git_status &> /dev/null __git_complete gst _git_stash &> /dev/null __git_complete gd _git_diff &> /dev/null __git_complete gdc _git_diff &> /dev/null __git_complete gc _git_commit &> /dev/null __git_complete gch _git_checkout &> /dev/null __git_complete gchb _git_checkout &> /dev/null __git_complete gb _git_branch &> /dev/null __git_complete gbd _git_branch &> /dev/null __git_complete gf _git_fetch &> /dev/null __git_complete gt _git_tag &> /dev/null __git_complete gp _git_apply &> /dev/null __git_complete ga _git_add &> /dev/null # Autocomplete with my git emails. function _gu() { _autocomplete_first account@voronind.com dd.voronin@fsight.ru } complete -F _gu gu