iwata.git-now/git-now-rebase
Motonori Iwata bab7666666 1. shortオプションを廃止
2. --removeオプションを追加
 3. --remoteオプションを--upstreamオプションに変更

 1. rebaseをremoteにpushする時ってremote branchを削除しとかないと変なこ
 とになっちゃい場合があるのでそのオプション追加したいけど結構危い▽そ▼
 操作になるのでshortオプションは廃止。なのでgetopt enhanced環境でないと▽
 エラーが表示される。
 2. なのでremote削除用のオプションがこれ
 3. removeオプション作ったのでremoveオプションだと用途が不明すぎるので▽
 改名。
2011-09-07 17:31:13 +09:00

69 lines
1.8 KiB
Plaintext

usage() {
echo "usage: git now rebase [<base-branch>]"
echo " git now rebase --push [<base-branch>]"
echo " git now rebase --push --upstream <remote> [<base-branch>]"
echo " git now rebase --push --remove <remote> [<base-branch>]"
}
cmd_default() {
parse_args "$@"
WORKING_BRANCH=$(git_current_branch)
INITIAL_COMMIT=$(git_now_initial_commit)
if [ -n "$BASE_BRANCH" ]; then
COMMON_ANCESTOR_COMMIT=`git merge-base ${BASE_BRANCH} ${WORKING_BRANCH}`
FIRST_NOW_COMMIT=$(git_now_first_commit $COMMON_ANCESTOR_COMMIT)
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
else
FIRST_NOW_COMMIT=$(git_now_first_commit)
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
if flag push; then
if [ -n "$UPSTREAM_REMOTE" ]; then
git push --set-upstream $UPSTREAM_REMOTE $WORKING_BRANCH
elif [ -n "$REMOVE_REMOTE" ]; then
git push $REMOVE_REMOTE :$WORKING_BRANCH
git push
else
git push
fi
fi
}
cmd_help() {
usage
exit 0
}
parse_args() {
# parse options
DEFINE_boolean 'push' false 'push to remote repository finally' ''
DEFINE_string 'remove' '' 'remote name to remove the remote branch before push' ''
DEFINE_string 'upstream' '' 'remote name for --set-upstream' ''
FLAGS "$@" || exit $?
eval set -- "${FLAGS_ARGV}"
# read arguments into global variables
BASE_BRANCH=$1
UPSTREAM_REMOTE=$FLAGS_upstream
REMOVE_REMOTE=$FLAGS_remove
}