Skip to content

Instantly share code, notes, and snippets.

@baskaran-md
Created February 28, 2017 19:34
Show Gist options
  • Save baskaran-md/1816c99056665b43e25047610530a4fc to your computer and use it in GitHub Desktop.
Save baskaran-md/1816c99056665b43e25047610530a4fc to your computer and use it in GitHub Desktop.
Function for git rebase and merge
export X_BLUE="\033[0;34m"
export X_BOLD="\033[1m"
export X_CYAN="\033[1;36m"
export X_GREEN="\033[0;32m"
export X_NC="\033[0m"
export X_RED="\033[0;31m"
export X_YELLOW="\033[1;33m"
##
# Function to rebase and merge any feature branch.
# Usage:
# git_merge my_feature_branch into master
# git_merge my_feature_branch master
##
function git_merge () {
SOURCE=${1:?Source Branch is missing}
MASTER=${2:?Target Branch is missing}
[[ ${MASTER} == "into" ]] && MASTER=${3:?Target branch missing}
printf "${X_CYAN}==> Checkout $MASTER ${X_NC}\n"
git checkout $MASTER
printf "${X_CYAN}==> Pull & Rebase $MASTER ${X_NC}\n"
git pull --rebase || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
read -p "..«"
printf "${X_CYAN}==> Checkout $SOURCE ${X_NC}\n"
git branch -D $SOURCE || printf "${X_YELLOW}Branch not found locally...\n"
git checkout $SOURCE || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
printf "${X_CYAN}==> Pull & Rebase $SOURCE ${X_NC}\n"
git pull origin ${SOURCE} || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
read -p "..«"
printf "${X_CYAN}==> Rebase $SOURCE with $MASTER ${X_NC}\n"
git rebase origin/$MASTER || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
printf "${X_CYAN}==> Push $SOURCE ${X_NC}\n"
git push origin $SOURCE -f || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
printf "${X_CYAN}==> Commits on $SOURCE to be merged. ${X_NC}\n"
git lg origin/$MASTER..HEAD
printf "${X_CYAN}:: Needs rebase? ([y]|n): ${X_NC}"
read doRebase
[[ $doRebase != "n" ]] && printf "${X_RED}Please rebase & try again...${X_NC}\n" && return 1 || printf "Continuing without rebase...\n"
printf "${X_CYAN}==> Checkout $MASTER for merging $SOURCE ${X_NC}\n"
git checkout $MASTER
printf "${X_CYAN}==> Merging $SOURCE with $MASTER ${X_NC}\n"
git merge origin/$SOURCE || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
read -p "..«"
printf "${X_CYAN}==> Push $MASTER ${X_NC}\n"
git push origin $MASTER || (printf "${X_RED}Failed...${X_NC}\n" && return 1)
printf "${X_CYAN}==> Delete $SOURCE? ([y]|n): ${X_NC}"
read doDelete
[[ $doDelete != "n" ]] && printf "${X_RED}Deleting $SOURCE Branch...${X_NC}\n" && git push origin :$SOURCE || printf "${X_RED}Skipping Delete...${X_NC}\n"
printf "${X_CYAN}==> END of merge $SOURCE into $MASTER ${X_NC}\n"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment