Browse Source
This command helps you resurrect accidentally lost tags and commits. Signed-off-by: Junio C Hamano <junkio@cox.net>maint
Junio C Hamano
19 years ago
4 changed files with 106 additions and 1 deletions
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
git-lost+found(1) |
||||
================= |
||||
|
||||
NAME |
||||
---- |
||||
git-lost+found - Recover lost refs that luckily have not yet been pruned. |
||||
|
||||
SYNOPSIS |
||||
-------- |
||||
'git-lost+found' |
||||
|
||||
DESCRIPTION |
||||
----------- |
||||
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. |
||||
|
||||
|
||||
OUTPUT |
||||
------ |
||||
One line description from the commit and tag found along with |
||||
their object name are printed on the standard output. |
||||
|
||||
|
||||
EXAMPLE |
||||
------- |
||||
|
||||
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 |
||||
tag |
||||
$ git cat-file tag 1ef2b196 |
||||
object fa41bbce8e38c67a218415de6cfa510c7e50032a |
||||
type commit |
||||
tag v0.99.9c |
||||
tagger Junio C Hamano <junkio@cox.net> 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 |
||||
1ef2b196d909eed523d4f3c9bf54b78cdd6843c6 |
||||
------------ |
||||
|
||||
Author |
||||
------ |
||||
Written by Junio C Hamano <junkio@cox.net> |
||||
|
||||
Documentation |
||||
-------------- |
||||
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. |
||||
|
||||
|
||||
GIT |
||||
--- |
||||
Part of the gitlink:git[7] suite |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh |
||||
|
||||
. git-sh-setup || die "Not a git archive." |
||||
|
||||
laf="$GIT_DIR/lost+found" |
||||
rm -fr "$laf" && mkdir -p "$laf/commit" "$laf/other" || exit |
||||
|
||||
git fsck-objects | |
||||
while read dangling type sha1 |
||||
do |
||||
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 |
||||
done |
Loading…
Reference in new issue