Created
March 15, 2018 21:37
-
-
Save asit-dhal/ecd1298cad7b2628451e80be68ef6c46 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
#!/bin/bash | |
# | |
# Copyright(c) 2018 Asit Dhal. | |
# Distributed under the MIT License (http://opensource.org/licenses/MIT) | |
# | |
LIGHT_BLUE='\033[1;34m' | |
RED='\033[0;31m' | |
NC='\033[0m' # No Color | |
INTERACTIVE="" | |
FORCE_DELETE="" | |
MASTER="master" | |
while [[ $# -gt 0 ]] | |
do | |
key="$1" | |
case $key in | |
-f) | |
FORCE_DELETE="y" | |
shift | |
;; | |
-i) | |
INTERACTIVE="i" | |
shift | |
;; | |
-fi|-if) | |
INTERACTIVE="i" | |
FORCE_DELETE="y" | |
shift | |
;; | |
-h) | |
echo "$(basename $0) -i Intecative deletion of local branches" | |
echo "$(basename $0) -f Force delete the branch(es)" | |
echo "$(basename $0) List local branches with creation and last update date" | |
exit | |
;; | |
*) | |
shift | |
esac | |
done | |
current_branch=$(git branch | grep "*") | |
current_branch=${current_branch/* /} | |
if [ "${current_branch}" != "${MASTER}" ]; then | |
printf "Please change the current branch to ${LIGHT_BLUE}${MASTER}${NC}\n" | |
exit | |
fi | |
if ! git diff-files --quiet; then | |
printf "you have unstaged changes. $(basename $0) needs a clean working index\n" | |
git diff-files --name-status | |
printf "Please commit or stash them.\n" | |
exit | |
fi | |
if ! git diff-index --cached --quiet HEAD; then | |
printf "your index contains uncommitted changes. $(basename $0) needs a clean working index\n" | |
git diff-index --cached --name-status HEAD | |
printf "Please commit or stash them.\n" | |
exit | |
fi | |
for brnch in $(git branch | sed /\*/d); do | |
created_commit_id=$(git merge-base ${brnch} ${MASTER}) | |
created_date=$(git log --pretty=format:"%ad" --date=short -n 1 ${created_commit_id}) | |
created_ago=$(git log --pretty=format:"%cr" --date=short -n 1 ${created_commit_id}) | |
last_updated_date=$(git log --pretty=format:"%ad" --date=short -n 1 ${brnch}) | |
updated_before=$(git log --pretty=format:"%cr" --date=short -n 1 ${brnch}) | |
commit_message_subject=$(git log --pretty=format:'%s' -n 1 ${brnch}) | |
printf "Branch name : ${brnch} \n" | |
printf "Created on : ${created_date}${RED}(${created_ago})${NC}\n" | |
printf "Last updated on : ${last_updated_date}${RED}(${updated_before}${NC})\n" | |
printf "Last commit message : ${commit_message_subject}\n" | |
if [ "${INTERACTIVE}" == "i" ]; then | |
printf "${LIGHT_BLUE}Delete the branch, followed by [y/n]?${NC} " | |
read ip | |
if [ "$ip" == "y" ]; then | |
if [ "${FORCE_DELETE}" == "y" ]; then | |
git branch -D ${brnch} | |
else | |
git branch -d ${brnch} | |
if [ $? -ne 0 ]; then | |
printf "${LIGHT_BLUE}Run with -fi command to delete ${brnch}${NC}\n" | |
fi | |
fi | |
fi | |
fi | |
done |
Hi, sorry for my late reply. I just saw the message now. I will create a repo and share here. Thanks for your feedback.
@cg-cnu Here is the git repo
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hey @asit-dhal Thanks for this! Looking for exactly the same script! Mind converting it to github repo ? Have few suggestions which I can make a pr for if you are interested 😃