Anonymous committed 04e7ca1


This command helps you resurrect accidentally lost tags and commits.

Signed-off-by: Junio C Hamano <>

Comments (0)

Files changed (4)


+git-lost+found - Recover lost refs that luckily have not yet been pruned.
+Finds dangling commits and tags from the object database, and
+creates refs to them in .git/lost+found/ directory.  Commits and
+tags that dereference to commits go to .git/lost+found/commit
+and others are stored in .git/lost+found/other directory.
+One line description from the commit and tag found along with
+their object name are printed on the standard output.
+Suppose you run 'git tag -f' and mistyped the tag to overwrite.
+The ref to your tag is overwritten, but until you run 'git
+prune', it is still there.
+$ git lost+found
+[1ef2b196d909eed523d4f3c9bf54b78cdd6843c6] GIT 0.99.9c
+Also you can use gitk to browse how they relate to each other
+and existing (probably old) tags.
+$ gitk $(cd .git/lost+found/commit && echo ??*)
+After making sure that it is the object you are looking for, you
+can reconnect it to your regular .git/refs hierarchy.
+$ git cat-file -t 1ef2b196
+$ git cat-file tag 1ef2b196
+object fa41bbce8e38c67a218415de6cfa510c7e50032a
+type commit
+tag v0.99.9c
+tagger Junio C Hamano <> 1131059594 -0800
+GIT 0.99.9c
+This contains the following changes from the "master" branch, since
+$ git update-ref refs/tags/not-lost-anymore 1ef2b196
+$ git rev-parse not-lost-anymore
+Written by Junio C Hamano <>
+Documentation by Junio C Hamano and the git-list <>.
+Part of the gitlink:git[7] suite


 	Salvage your data out of another SCM people love to hate.
+	Recover lost refs that luckily have not yet been pruned.
 	The standard helper program to use with "git-merge-index" \ \ \
+ \
 	git-archimport.perl git-cvsimport.perl git-relink.perl \

+. git-sh-setup || die "Not a git archive."
+rm -fr "$laf" && mkdir -p "$laf/commit" "$laf/other" || exit
+git fsck-objects |
+while read dangling type sha1
+	case "$dangling" in
+	dangling)
+		if git-rev-parse --verify "$sha1^0" >/dev/null 2>/dev/null
+		then
+			dir="$laf/commit"
+			git-show-branch "$sha1"
+		else
+			dir="$laf/other"
+		fi
+		echo "$sha1" >"$dir/$sha1"
+		;;
+	esac
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.