diff --git a/git-flow b/git-flow
new file mode 100755
index 0000000..7f065e1
--- /dev/null
+++ b/git-flow
@@ -0,0 +1,149 @@
+#!/bin/bash
+#
+# gitflow -- A collection of Git wrapper scripts to provide high-level
+# repository operations for Vincent Driessen's branching model:
+#
+# Original blog post presenting this model is found at:
+#    http://nvie.com/archives/323
+#
+# Feel free to contribute to this project at:
+#    http://github.com/nvie/gitflow
+#
+# Copyright (c) 2010 by Vincent Driessen
+# Copyright (c) 2010 by Benedikt Böhm
+#
+
+warn() { echo "$@" >&2; }
+die() { warn "$@"; exit 1; }
+has() { [[ " ${*:2} " == *" $1 "* ]]; }
+
+usage() {
+	echo "usage: git flow <cmd> <btype> <args>"
+	echo
+	echo "<btype> can be any of: feature, release, hotfix, support"
+	echo
+	echo "Try 'git flow help <btype>' for details."
+}
+
+main() {
+	if [ $# -lt 2 ]; then
+		usage
+		exit 1
+	fi
+
+	export GITFLOW_DIR=$(dirname "$0")
+
+	# sanity checks
+	ACTION="$1"
+	BTYPE="$2"
+	shift 2
+
+	if [ ! -e "$GITFLOW_DIR/git-flow-$BTYPE" ]; then
+		usage
+		exit 1
+	fi
+
+	if ! git rev-parse --git-dir &>/dev/null; then
+		die "Not a git repository"
+	fi
+
+	# get all available branches
+	LOCAL_BRANCHES=$(git branch | sed 's/^[* ] //')
+	REMOTE_BRANCHES=$(git branch -r | sed 's/^[* ] //')
+	ALL_BRANCHES="$LOCAL_BRANCHES $REMOTE_BRANCHES"
+
+	# run command
+	. "$GITFLOW_DIR/git-flow-$BTYPE"
+
+	if ! declare -f cmd_$ACTION >/dev/null; then
+		usage
+		exit 1
+	fi
+
+	# fail if a command failes
+	set -e
+
+	# run command
+	cmd_$ACTION "$@"
+}
+
+gitflow_check_clean_working_tree() {
+	if ! git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
+		die "Working tree contains unstaged changes. Aborting ..."
+	fi
+	if ! git diff-index --cached --quiet --ignore-submodules HEAD --; then
+		die "Index contains uncommited changes. Aborting ..."
+	fi
+}
+
+gitflow_require_local_branch() {
+	if ! has $1 $LOCAL_BRANCHES; then
+		die "Local branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_remote_branch() {
+	if ! has $1 $REMOTE_BRANCHES; then
+		die "Remote branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_branch() {
+	if ! has $1 $ALL_BRANCHES; then
+		die "Branch '$1' does not exist and is required."
+	fi
+}
+
+gitflow_require_branch_absent() {
+	if has $1 $ALL_BRANCHES; then
+		die "Branch '$1' already exists. Pick another name."
+	fi
+}
+
+#
+# gitflow_test_branches_equal()
+#
+# Tests whether branches and their "origin" counterparts have diverged and need
+# merging first. It returns error codes to provide more detail, like so:
+#
+# 0    Branch heads point to the same commit
+# 1    First given branch needs fast-forwarding
+# 2    Second given branch needs fast-forwarding
+# 3    Branch needs a real merge
+#
+gitflow_test_branches_equal() {
+	commit1=$(git rev-parse "$1")
+	commit2=$(git rev-parse "$2")
+	if [ "$commit1" != "$commit2" ]; then
+		base=$(git merge-base "$commit1" "$commit2")
+		if [ "$commit1" = "$base" ]; then
+			return 1
+		elif [ "$commit2" = "$base" ]; then
+			return 2
+		else
+			return 3
+		fi
+	else
+		return 0
+	fi
+}
+
+gitflow_require_branches_equal() {
+	gitflow_require_local_branch "$1"
+	gitflow_require_remote_branch "$2"
+	gitflow_test_branches_equal "$1" "$2"
+	status=$?
+	if [ $status -gt 0 ]; then
+		warn "Branches '$1' and '$2' have diverged."
+		if [ $status -eq 1 ]; then
+			die "And branch '$1' may be fast-forwarded."
+		elif [ $status -eq 2 ]; then
+			# Warn here, since there is no harm in being ahead
+			warn "And local branch '$1' is ahead of '$2'."
+		else
+			die "Branches need merging first."
+		fi
+	fi
+}
+
+main "$@"
