From f932fa792e8c1b03dc31ae0ecb1392de586ee6d6 Mon Sep 17 00:00:00 2001 From: Sorin Ionescu Date: Mon, 21 May 2012 17:22:49 -0400 Subject: [PATCH] Add the ability to recover dropped Git stashes --- modules/git/alias.zsh | 2 ++ modules/git/functions/git-stash-dropped | 18 ++++++++++++++++++ modules/git/functions/git-stash-recover | 14 ++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 modules/git/functions/git-stash-dropped create mode 100644 modules/git/functions/git-stash-recover diff --git a/modules/git/alias.zsh b/modules/git/alias.zsh index 611ce9e7..62db3831 100644 --- a/modules/git/alias.zsh +++ b/modules/git/alias.zsh @@ -122,9 +122,11 @@ alias gs='git stash' alias gsa='git stash apply' alias gsc='git-stash-clear-interactive' alias gsx='git stash drop' +alias gsd='git-stash-dropped' alias gsl='git stash list' alias gsL='git stash show --patch --stat' alias gsp='git stash pop' +alias gsr='git-stash-recover' alias gss='git stash save --include-untracked' alias gsS='git stash save --patch --no-keep-index' diff --git a/modules/git/functions/git-stash-dropped b/modules/git/functions/git-stash-dropped new file mode 100644 index 00000000..bdba2386 --- /dev/null +++ b/modules/git/functions/git-stash-dropped @@ -0,0 +1,18 @@ +# +# Lists dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +git fsck --unreachable 2> /dev/null + | grep 'commit' \ + | awk '{print $3}' \ + | git log \ + ${git_log_format_oneline} + --extended-regexp \ + --grep="${1:-(WIP )?[Oo]n [^:]+:}" \ + --merges \ + --no-walk \ + --stdin + diff --git a/modules/git/functions/git-stash-recover b/modules/git/functions/git-stash-recover new file mode 100644 index 00000000..dd50a1bc --- /dev/null +++ b/modules/git/functions/git-stash-recover @@ -0,0 +1,14 @@ +# +# Recovers dropped Git stashed states. +# +# Authors: +# Sorin Ionescu +# + +local commit + +for commit in "$@"; do + git update-ref \ + -m "$(git log -1 --pretty="format:%s" "$commit")" refs/stash "$commit" +done +