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"
+}