Snippets

Ben Buchanan BASH: git update script

You are viewing an old version of this snippet. View the current version.
Revised by Ben Buchanan f2af1c6
#!/bin/bash
ORIGIN=$(git remote | grep -i origin)
if [[ ! $ORIGIN ]];then
    echo "Remote named 'origin' is required."
    exit
fi

# if there's a remote called "upstream" presume we're on a fork
ONFORK=$(git remote | grep -i upstream)

# get branch name
# BRANCH=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')
BRANCH=$(git rev-parse --abbrev-ref HEAD)

spacer() {
    echo "------------------------------------------------------------------------------------------"
}
echoAndRun() {
    echo "$1"
    $1
    spacer
}
prune() {
    # prune guards against dangling blobs
    echoAndRun "git prune"
}
checkoutMaster() {
    echoAndRun "git checkout master"
}
checkoutLastBranch() {
    echoAndRun "git checkout -"
}
pullUpstreamMaster() {
    echoAndRun "git pull upstream master"
}
pushOriginMaster() {
    echoAndRun "git push origin master"
}

spacer

if [ "$ONFORK" ]
then
    echo "Upstream remote detected. Will update fork and push to origin master."
    spacer

    if [ "$BRANCH" == "master" ]; then
        pullUpstreamMaster
        prune
        pushOriginMaster
    else
        checkoutMaster
        pullUpstreamMaster
        prune
        pushOriginMaster
        checkoutLastBranch

        read -r -p "Merge from master? [y/N] " response
        if [[ $response =~ ^([yY][eE][sS]|[yY])$ ]]
        then
            echoAndRun "git merge master"
        fi

    fi;

else
    echoAndRun "git pull"
    prune
fi
HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.