git-lost+found
This command helps you resurrect accidentally lost tags and commits. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
d7b1a1ddbe
commit
04e7ca1a1b
78
Documentation/git-lost+found.txt
Normal file
78
Documentation/git-lost+found.txt
Normal file
@ -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
|
@ -309,6 +309,9 @@ gitlink:git-convert-objects[1]::
|
|||||||
gitlink:git-cvsimport[1]::
|
gitlink:git-cvsimport[1]::
|
||||||
Salvage your data out of another SCM people love to hate.
|
Salvage your data out of another SCM people love to hate.
|
||||||
|
|
||||||
|
gitlink:git-lost+found[1]::
|
||||||
|
Recover lost refs that luckily have not yet been pruned.
|
||||||
|
|
||||||
gitlink:git-merge-one-file[1]::
|
gitlink:git-merge-one-file[1]::
|
||||||
The standard helper program to use with "git-merge-index"
|
The standard helper program to use with "git-merge-index"
|
||||||
|
|
||||||
|
3
Makefile
3
Makefile
@ -89,7 +89,8 @@ SCRIPT_SH = \
|
|||||||
git-tag.sh git-verify-tag.sh git-whatchanged.sh git.sh \
|
git-tag.sh git-verify-tag.sh git-whatchanged.sh git.sh \
|
||||||
git-applymbox.sh git-applypatch.sh git-am.sh \
|
git-applymbox.sh git-applypatch.sh git-am.sh \
|
||||||
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
|
git-merge.sh git-merge-stupid.sh git-merge-octopus.sh \
|
||||||
git-merge-resolve.sh git-merge-ours.sh git-grep.sh
|
git-merge-resolve.sh git-merge-ours.sh git-grep.sh \
|
||||||
|
git-lost+found.sh
|
||||||
|
|
||||||
SCRIPT_PERL = \
|
SCRIPT_PERL = \
|
||||||
git-archimport.perl git-cvsimport.perl git-relink.perl \
|
git-archimport.perl git-cvsimport.perl git-relink.perl \
|
||||||
|
23
git-lost+found.sh
Executable file
23
git-lost+found.sh
Executable file
@ -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
Block a user