diff --git a/git-now b/git-now old mode 100644 new mode 100755 index 8a7158b..03c5207 --- a/git-now +++ b/git-now @@ -5,30 +5,48 @@ MESSAGE="[${PREFIX}] `date +\"%Y/%m/%d %T\"`" if [ $# -eq 0 ] then - git add -u - printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - + git add -u + printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - elif [ $1 != "--rebase" ] then - if [ $1 != "--all" ] - then - git add $@ - else - git add -u - git add . - fi - printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - + if [ $1 != "--all" ] + then + git add $@ + else + git add -u + git add . + fi + printf "${MESSAGE}\n\n%s" "`git diff --cached`" | git commit -F - else + if [ $# -eq 1 ] + then FIRST_NOW_COMMIT=`git log --pretty=oneline --grep="${PREFIX}" | tail -n 1 | cut -d " " -f 1` INITIAL_COMMIT=`git log --pretty=oneline | tail -n 1 | cut -d " " -f 1` if [ ${FIRST_NOW_COMMIT} != ${INITIAL_COMMIT} ] then - git rebase -i ${FIRST_NOW_COMMIT}^ + git rebase -i ${FIRST_NOW_COMMIT}^ else - WORKING_BRANCH=`git branch -l | grep "*" | cut -d " " -f 2` + WORKING_BRANCH=`git branch -l | grep "*" | cut -d " " -f 2` - git checkout ${FIRST_NOW_COMMIT} - git commit --amend - git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH} + git checkout ${FIRST_NOW_COMMIT} + git commit --amend + git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH} fi + else + BASE_BRANCH=$2 + WORKING_BRANCH=`git branch -l | grep "*" | cut -d " " -f 2` + COMMON_ANCESTOR_COMMIT=`git merge-base ${BASE_BRANCH} ${WORKING_BRANCH}` + FIRST_NOW_COMMIT=`git log ${COMMON_ANCESTOR_COMMIT}.. --pretty=oneline --grep="${PREFIX}" | tail -n 1 | cut -d " " -f 1` + INITIAL_COMMIT=`git log --pretty=oneline | tail -n 1 | cut -d " " -f 1` + + if [ ${FIRST_NOW_COMMIT} != ${INITIAL_COMMIT} ] + then + git rebase -i ${FIRST_NOW_COMMIT}^ + else + git checkout ${FIRST_NOW_COMMIT} + git commit --amend + git rebase --onto HEAD ${FIRST_NOW_COMMIT} ${WORKING_BRANCH} + fi + fi fi