Created
August 18, 2014 02:29
-
-
Save bradediger/be689a0e9b7d3652909b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Aliases | |
alias g='git' | |
compdef g=git | |
alias gst='git status' | |
compdef _git gst=git-status | |
alias gl='git pull' | |
compdef _git gl=git-pull | |
alias gup='git fetch && git rebase' | |
compdef _git gup=git-fetch | |
alias gp='git push' | |
compdef _git gp=git-push | |
gdv() { git diff -w "$@" | view - } | |
compdef _git gdv=git-diff | |
alias gc='git commit -v' | |
compdef _git gc=git-commit | |
alias gca='git commit -v -a' | |
compdef _git gca=git-commit | |
alias gco='git checkout' | |
compdef _git gco=git-checkout | |
alias gcm='git checkout master' | |
alias gb='git branch' | |
compdef _git gb=git-branch | |
alias gba='git branch -a' | |
compdef _git gba=git-branch | |
alias gcount='git shortlog -sn' | |
compdef gcount=git | |
alias gcp='git cherry-pick' | |
compdef _git gcp=git-cherry-pick | |
alias glg='git log --stat --max-count=5' | |
compdef _git glg=git-log | |
alias glgg='git log --graph --max-count=5' | |
compdef _git glgg=git-log | |
alias gss='git status -s' | |
compdef _git gss=git-status | |
alias ga='git add' | |
compdef _git ga=git-add | |
alias gm='git merge' | |
compdef _git gm=git-merge | |
alias grh='git reset HEAD' | |
alias grhh='git reset HEAD --hard' | |
# Git and svn mix | |
alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk' | |
compdef git-svn-dcommit-push=git | |
alias gsr='git svn rebase' | |
alias gsd='git svn dcommit' | |
# | |
# Will return the current branch name | |
# Usage example: git pull origin $(current_branch) | |
# | |
function current_branch() { | |
ref=$(git symbolic-ref HEAD 2> /dev/null) || return | |
echo ${ref#refs/heads/} | |
} | |
# these aliases take advantage of the previous function | |
alias ggpull='git pull origin $(current_branch)' | |
compdef ggpull=git | |
alias ggpush='git push origin $(current_branch)' | |
compdef ggpush=git | |
alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)' | |
compdef ggpnp=git |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# get the name of the branch we are on | |
function git_prompt_info() { | |
local g="$(git rev-parse --git-dir 2>/dev/null)" | |
ref=$(git symbolic-ref HEAD 2> /dev/null) || return | |
echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" | |
} | |
# Checks if working tree is dirty | |
parse_git_dirty() { | |
local SUBMODULE_SYNTAX='' | |
if [[ $POST_1_7_2_GIT -gt 0 ]]; then | |
SUBMODULE_SYNTAX="--ignore-submodules=dirty" | |
fi | |
if [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]]; then | |
echo "$ZSH_THEME_GIT_PROMPT_DIRTY" | |
else | |
echo "$ZSH_THEME_GIT_PROMPT_CLEAN" | |
fi | |
} | |
# Checks if there are commits ahead from remote | |
function git_prompt_ahead() { | |
if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then | |
echo "$ZSH_THEME_GIT_PROMPT_AHEAD" | |
fi | |
} | |
# Formats prompt string for current git commit short SHA | |
function git_prompt_short_sha() { | |
SHA=$(git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" | |
} | |
# Formats prompt string for current git commit long SHA | |
function git_prompt_long_sha() { | |
SHA=$(git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" | |
} | |
# Get the status of the working tree | |
git_prompt_status() { | |
INDEX=$(git status --porcelain 2> /dev/null) | |
STATUS="" | |
if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" | |
fi | |
if $(echo "$INDEX" | grep '^A ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" | |
elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" | |
fi | |
if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" | |
elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" | |
elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" | |
fi | |
if $(echo "$INDEX" | grep '^R ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" | |
fi | |
if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" | |
elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" | |
fi | |
if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then | |
STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" | |
fi | |
echo $STATUS | |
} | |
#compare the provided version of git to the version installed and on path | |
#prints 1 if input version <= installed version | |
#prints -1 otherwise | |
function git_compare_version() { | |
local INPUT_GIT_VERSION=$1; | |
local INSTALLED_GIT_VERSION | |
INPUT_GIT_VERSION=(${(s/./)INPUT_GIT_VERSION}); | |
INSTALLED_GIT_VERSION=($(/usr/bin/git --version)); | |
INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]}); | |
for i in {1..3}; do | |
if [[ $INSTALLED_GIT_VERSION[$i] -lt $INPUT_GIT_VERSION[$i] ]]; then | |
echo -1 | |
return 0 | |
fi | |
done | |
echo 1 | |
} | |
#this is unlikely to change so make it all statically assigned | |
POST_1_7_2_GIT=$(git_compare_version "1.7.2") | |
#clean up the namespace slightly by removing the checker function | |
unset -f git_compare_version | |
# BE: use this to merge stuff that has changed enough to break git's rename detection. | |
# | |
# (long_lived_branch)% merge_renamed_file long_lived_branch app/models/foobar.rb | |
# | |
# (gives you a diff of what changed on foobar.rb upstream since the last merge) | |
merge_renamed_file() { | |
branch=$1 | |
remote_filename=$2 | |
base=$(git merge-base ${branch} origin/master) | |
git diff ${base}..origin/master -- $remote_filename | |
} | |
merge_renamed_file3() { | |
branch=$1 | |
othe=$2 | |
remote_filename=$3 | |
base=$(git merge-base ${branch} ${other}) | |
git diff ${base}..${other} -- $remote_filename | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment