Merge branch 'feature/rebase-subcommand' into develop
diff --git a/git-flow-feature b/git-flow-feature
index efa5002..ef4d526 100644
--- a/git-flow-feature
+++ b/git-flow-feature
@@ -21,6 +21,7 @@
echo " git flow feature publish <name>"
echo " git flow feature track <name>"
echo " git flow feature diff <name|nameprefix>"
+ echo " git flow feature rebase [-i] <name|nameprefix>"
}
cmd_default() {
@@ -127,6 +128,21 @@
BRANCH=$PREFIX$NAME
}
+expand_name_arg_prefix_or_current() {
+ CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
+ if [ "$NAME" != "" ]; then
+ expand_name_arg_prefix
+ elif [ "$CURRENT_BRANCH" != "" ]; then
+ BRANCH="$CURRENT_BRANCH"
+ NAME=$(echo "$BRANCH" | sed "s?$PREFIX??g")
+ else
+ warn "The current HEAD is no feature branch."
+ warn "To diff a feature, specify a <name> argument."
+ usage
+ exit 1
+ fi
+}
+
parse_args() {
# parse options
FLAGS "$@" || exit $?
@@ -233,9 +249,20 @@
gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
fi
+ # if the user wants to rebase, do that first
+ if [ $FLAGS_rebase -eq 1 ]; then
+ if ! git flow feature rebase "$NAME" "$BASE"; then
+ warn "Finish was aborted due to conflicts during rebase."
+ warn "Please finish the rebase manually now."
+ warn "When finished, re-run:"
+ warn " git flow feature finish '$NAME' '$BASE'"
+ exit 1
+ fi
+ fi
+
# merge into BASE
git checkout $BASE
- if [ "$(git rev-list -n2 $BASE..$BRANCH | wc -l)" = "1" ]; then
+ if [ "$(git rev-list -n2 $BASE..$BRANCH | wc -l)" -eq 1 ]; then
git merge --ff $BRANCH
else
git merge --no-ff $BRANCH
@@ -328,19 +355,25 @@
cmd_diff() {
parse_args "$@"
- CURRENT_BRANCH=$(git branch | grep '^\* ' | grep -v 'no branch' | sed 's/^* //g')
- if [ "$NAME" != "" ]; then
- expand_name_arg_prefix
- elif [ "$CURRENT_BRANCH" != "" ]; then
- BRANCH="$CURRENT_BRANCH"
- else
- warn "The current HEAD is no feature branch."
- warn "To diff a feature, specify a <name> argument."
- usage
- exit 1
- fi
+ expand_name_arg_prefix_or_current
# TODO: if this feature has been based on a non-develop branch, we really
# should not be comparing to $DEVELOP. How to deal with this?
git diff $DEVELOP_BRANCH..$BRANCH
}
+
+cmd_rebase() {
+ DEFINE_boolean interactive 0 'do an interactive rebase' i
+ parse_args "$@"
+ expand_name_arg_prefix_or_current
+ warn "Will try to rebase '$NAME'..."
+ gitflow_require_clean_working_tree
+ gitflow_require_branch "$BRANCH"
+
+ git checkout -q "$BRANCH"
+ OPTS=
+ if [ $FLAGS_interactive -eq 1 ]; then
+ OPTS="$OPTS -i"
+ fi
+ git rebase $OPTS "$BASE"
+}