#!/usr/bin/env bash while test $# != 0 do case $1 in -r|--remote) if [[ -n $2 ]] then REMOTE=$2 shift else REMOTE=origin fi ;; *) BRANCH=$1 esac shift done if [[ -z $BRANCH ]] && [[ -n $REMOTE ]] then BRANCH=$REMOTE REMOTE=origin fi test -z $BRANCH && echo "branch required." 1>&2 && exit 1 if [[ -n $REMOTE ]] then git ls-remote --exit-code $REMOTE &>/dev/null if [ $? = 0 ] then git push $REMOTE HEAD:refs/heads/$BRANCH git fetch $REMOTE git checkout --track -b $BRANCH $REMOTE/$BRANCH exit $? fi fi git checkout -b $BRANCH