git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Document 'stash clear' recovery via unreachable commits
@ 2009-08-09  0:47 Thomas Rast
  2009-08-09  1:25 ` Junio C Hamano
  0 siblings, 1 reply; 4+ messages in thread
From: Thomas Rast @ 2009-08-09  0:47 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Björn Steinbrink

Add an example to the stash documentation that shows how to quickly
find candidate commits among the 'git fsck --unreachable' output.
Unless you have merges of branch names containing WIP, or edit your
merge messages to say WIP, there will be no false positives.

Snippet written by Björn "doener" Steinbrink and me after zepolen_
asked on IRC.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
 Documentation/git-stash.txt |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt
index 1c64a02..2f5ca7b 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.txt
@@ -114,7 +114,8 @@ no conflicts.
 
 clear::
 	Remove all the stashed states. Note that those states will then
-	be subject to pruning, and may be difficult or impossible to recover.
+	be subject to pruning, and may be impossible to recover (see
+	'Examples' below for a possible strategy).
 
 drop [-q|--quiet] [<stash>]::
 
@@ -217,6 +218,20 @@ $ edit/build/test remaining parts
 $ git commit foo -m 'Remaining parts'
 ----------------------------------------------------------------
 
+Recovering stashes that were cleared/dropped erroneously::
+
+If you mistakenly drop or clear stashes, they cannot be recovered
+through the normal safety mechanisms.  However, you can try the
+following incantation to get a list of stashes that are still in your
+repository, but not reachable any more:
++
+----------------------------------------------------------------
+git fsck --unreachable |
+grep commit | cut -d\  -f3 |
+xargs git log --merges --no-walk --grep=WIP
+----------------------------------------------------------------
+
+
 SEE ALSO
 --------
 linkgit:git-checkout[1],
-- 
1.6.4.195.g3a1c2

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Document 'stash clear' recovery via unreachable commits
  2009-08-09  0:47 [PATCH] Document 'stash clear' recovery via unreachable commits Thomas Rast
@ 2009-08-09  1:25 ` Junio C Hamano
  2009-08-09  2:21   ` Björn Steinbrink
  2009-08-09  9:26   ` Sitaram Chamarty
  0 siblings, 2 replies; 4+ messages in thread
From: Junio C Hamano @ 2009-08-09  1:25 UTC (permalink / raw)
  To: Thomas Rast; +Cc: git, Björn Steinbrink

Thomas Rast <trast@student.ethz.ch> writes:

> Add an example to the stash documentation that shows how to quickly
> find candidate commits among the 'git fsck --unreachable' output.

Thanks.

> Unless you have merges of branch names containing WIP, or edit your
> merge messages to say WIP, there will be no false positives.

That may be true, but I suspect that people's stash entries that are worth
saving are given their own messages with "git stash save 'message'" and do
not necessarily say WIP.  I wish if there were a better way to identify
them, but I do not think of any offhand.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Document 'stash clear' recovery via unreachable commits
  2009-08-09  1:25 ` Junio C Hamano
@ 2009-08-09  2:21   ` Björn Steinbrink
  2009-08-09  9:26   ` Sitaram Chamarty
  1 sibling, 0 replies; 4+ messages in thread
From: Björn Steinbrink @ 2009-08-09  2:21 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Thomas Rast, git

On 2009.08.08 18:25:55 -0700, Junio C Hamano wrote:
> Thomas Rast <trast@student.ethz.ch> writes:
> 
> > Add an example to the stash documentation that shows how to quickly
> > find candidate commits among the 'git fsck --unreachable' output.
> 
> Thanks.
> 
> > Unless you have merges of branch names containing WIP, or edit your
> > merge messages to say WIP, there will be no false positives.
> 
> That may be true, but I suspect that people's stash entries that are worth
> saving are given their own messages with "git stash save 'message'" and do
> not necessarily say WIP.  I wish if there were a better way to identify
> them, but I do not think of any offhand.

Here's what I have now:

git fsck --unreachable | grep commit | cut -d\  -f3 |
xargs git log --no-walk --merges \
	--grep='^\(WIP on \|On \)\((no branch)\|[^ ]\+\):'

Should catch stashes with and without user-supplied messages and avoid
most false-positives. Drop the "WIP on " option from the grep to capture
just those that have a user-supplied message.

To try really really hard to get stash stuff only, one could add some
extra stuff to verify that the second parent's commit message is
"index on \2:" (\2 being the second group from the above --grep). But
that's probably total overkill...

Björn

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Document 'stash clear' recovery via unreachable commits
  2009-08-09  1:25 ` Junio C Hamano
  2009-08-09  2:21   ` Björn Steinbrink
@ 2009-08-09  9:26   ` Sitaram Chamarty
  1 sibling, 0 replies; 4+ messages in thread
From: Sitaram Chamarty @ 2009-08-09  9:26 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Thomas Rast, git, Björn Steinbrink

2009/8/9 Junio C Hamano <gitster@pobox.com>
>
> Thomas Rast <trast@student.ethz.ch> writes:


>
> > Unless you have merges of branch names containing WIP, or edit your
> > merge messages to say WIP, there will be no false positives.
>
> That may be true, but I suspect that people's stash entries that are worth
> saving are given their own messages with "git stash save 'message'" and do
> not necessarily say WIP.  I wish if there were a better way to identify
> them, but I do not think of any offhand.

gitk $(git fsck | grep commit | cut -f3 -d' ') --since='1 week ago'

The --since clause limits the display to stashes lost recently; adjust to taste.

A "stash" has a very recognisable, triangular, shape in the commit DAG
-- with gitk you can visually find stashes really fast even if your
time limit is too broad or you have too many other kinds of
unreachable commits perhaps due to too many rebase etc.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-08-09  9:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-09  0:47 [PATCH] Document 'stash clear' recovery via unreachable commits Thomas Rast
2009-08-09  1:25 ` Junio C Hamano
2009-08-09  2:21   ` Björn Steinbrink
2009-08-09  9:26   ` Sitaram Chamarty

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).