Subject: Re: [PATCH] Disconnect stash from its base commit

From: Abhijit Menon-Sen <[email-masked]>
Date: Thu, 3 Jul 2008 01:24:01 +0530

At 2008-07-02 12:01:35 -0700, [email-masked] wrote:
>
> 	But that imaginary "stash branch" command would always give you
> 	the exact state you were in and creates a clean fork to finish
> 	what you were doing, and continue.

Nice idea. Something as simple as the appended diff?

I reversed the stash/branch arguments so that one need specify only the
branch name. Playing with it a little, it feels very useful.

-- ams

diff --git a/git-stash.sh b/git-stash.sh
index 4938ade..d5ecd24 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -218,6 +218,21 @@ drop_stash () {
 	git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash
 }
 
+apply_to_branch () {
+	have_stash || die 'Nothing to apply'
+
+	test -n "$1" || die 'No branch name specified'
+	branch=$1
+
+	if test -z "$2"
+	then
+		set x "$ref_stash@{0}"
+	fi
+	stash=$2
+
+	git-checkout -b $branch $stash^ && apply_stash $stash
+}
+
 # Main command set
 case "$1" in
 list)
@@ -264,6 +279,10 @@ pop)
 		drop_stash "$@"
 	fi
 	;;
+branch)
+	shift
+	apply_to_branch "$@"
+	;;
 *)
 	if test $# -eq 0
 	then