Created
February 28, 2017 19:34
-
-
Save baskaran-md/1816c99056665b43e25047610530a4fc to your computer and use it in GitHub Desktop.
Function for git rebase and merge
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
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