threads / discuss / 14155

Searching all git objects

Subject: Searching all git objects

## tl;dr

6 messages between Jun 25, 2008 and Jun 26, 2008.

replies: 5people: 4as markdown or json

Sam G.· Jun 25, 2008, 23:06 UTC · lore
Hi all,

We recently had a developer make a large commit (mostly centered around one file) which she believed she properly pushed to a remote repository last week, but looking at both her repository and the remote repository, that commit is now nowhere to be found. If somehow the master branch she was working on in her repository has lost the reference to the commit through perhaps some errant rebasing, then perhaps an object containing the commit (or an object containing the file in that commit) still exists somewhere inside her .git/objects directory? We haven't done any git-gc recently. If so, how can I search through every single git object in her objects directory, searching for perhaps a specific part of the commit string, a line in the code or the filename of the file which was changed? Any help with this would be greatly appreciated. Thanks!

-Sam
Shawn O. Pearce· Jun 25, 2008, 23:17 UTC · re: Sam G. · lore

Re: Searching all git objects

"Sam G." <ceptorial@comcast.net> wrote:
Show 13 quoted lines
> We recently had a developer make a large commit (mostly centered  
> around one file) which she believed she properly pushed to a remote  
> repository last week, but looking at both her repository and the  
> remote repository, that commit is now nowhere to be found. If somehow  
> the master branch she was working on in her repository has lost the  
> reference to the commit through perhaps some errant rebasing, then  
> perhaps an object containing the commit (or an object containing the  
> file in that commit) still exists somewhere inside her .git/objects  
> directory? We haven't done any git-gc recently. If so, how can I  
> search through every single git object in her objects directory,  
> searching for perhaps a specific part of the commit string, a line in  
> the code or the filename of the file which was changed? Any help with  
> this would be greatly appreciated. Thanks!

Odds are it is in her HEAD reflog. You can look for it with `git log -g`. If you know some part of the commit message you may be able to filter it down with `git log -g --grep=X` or part of the change with `git log -g -SX`.

A coworker just did something like that today and lost his change; looking in the HEAD reflog and cherry-picking the commit recovered it quite easily.

-- 
Shawn.
Tarmigan· Jun 25, 2008, 23:32 UTC · re: Shawn O. Pearce · lore

Re: Searching all git objects

On Wed, Jun 25, 2008 at 4:17 PM, Shawn O. Pearce <spearce@spearce.org> wrote:
Show 19 quoted lines
> "Sam G." <ceptorial@comcast.net> wrote:
>> We recently had a developer make a large commit (mostly centered
>> around one file) which she believed she properly pushed to a remote
>> repository last week, but looking at both her repository and the
>> remote repository, that commit is now nowhere to be found. If somehow
>> the master branch she was working on in her repository has lost the
>> reference to the commit through perhaps some errant rebasing, then
>> perhaps an object containing the commit (or an object containing the
>> file in that commit) still exists somewhere inside her .git/objects
>> directory? We haven't done any git-gc recently. If so, how can I
>> search through every single git object in her objects directory,
>> searching for perhaps a specific part of the commit string, a line in
>> the code or the filename of the file which was changed? Any help with
>> this would be greatly appreciated. Thanks!
>
> Odds are it is in her HEAD reflog.  You can look for it with
> `git log -g`.  If you know some part of the commit message you
> may be able to filter it down with `git log -g --grep=X` or part
> of the change with `git log -g -SX`.

If it helps, I like viewing the reflog with gitk. Like this: gitk $(git log -g --pretty=format:%H)

Is there a shorter way to do this with gitk? It would be awesome to have `gitk -g` .

-Tarmigan
Sam G.· Jun 26, 2008, 00:49 UTC · re: Tarmigan · lore

Re: Searching all git objects

On Jun 25, 2008, at 4:32 PM, Tarmigan wrote:
Show 32 quoted lines
> On Wed, Jun 25, 2008 at 4:17 PM, Shawn O. Pearce  
> <spearce@spearce.org> wrote:
>> "Sam G." <ceptorial@comcast.net> wrote:
>>> We recently had a developer make a large commit (mostly centered
>>> around one file) which she believed she properly pushed to a remote
>>> repository last week, but looking at both her repository and the
>>> remote repository, that commit is now nowhere to be found. If  
>>> somehow
>>> the master branch she was working on in her repository has lost the
>>> reference to the commit through perhaps some errant rebasing, then
>>> perhaps an object containing the commit (or an object containing the
>>> file in that commit) still exists somewhere inside her .git/objects
>>> directory? We haven't done any git-gc recently. If so, how can I
>>> search through every single git object in her objects directory,
>>> searching for perhaps a specific part of the commit string, a line  
>>> in
>>> the code or the filename of the file which was changed? Any help  
>>> with
>>> this would be greatly appreciated. Thanks!
>>
>> Odds are it is in her HEAD reflog.  You can look for it with
>> `git log -g`.  If you know some part of the commit message you
>> may be able to filter it down with `git log -g --grep=X` or part
>> of the change with `git log -g -SX`.
>
> If it helps, I like viewing the reflog with gitk.  Like this:
> gitk $(git log -g --pretty=format:%H)
>
> Is there a shorter way to do this with gitk?  It would be awesome to
> have `gitk -g` .
>
> -Tarmigan

Unfortunately I can't seem to find it in here. So at this point it seems about 99% likely that it was never committed. Does this command search across all branches or only the one you have checked out when you run the git log command? And, just in case, is there any way to search raw objects for text, either commit text, file name or content? Thanks very much!

-Sam
Junio C Hamano· Jun 26, 2008, 01:00 UTC · re: Sam G. · lore

Re: Searching all git objects

"Sam G." <ceptorial@comcast.net> writes:
> And, just in case, is there any way to
> search raw objects for text, either commit text, file name or content?
> Thanks very much!
Or run "git lost-found" and grep for blobs in .git/lost-found/other/*
Sam G.· Jun 26, 2008, 22:23 UTC · re: Junio C Hamano · lore

Re: Searching all git objects

git-lost-found actually did it... she had git-stashed it a number of times throughout development, so through some grepping of the lost- found objects, we were able to find a very close version. What a relief! Thanks to everyone for your help!

-Sam
On Jun 25, 2008, at 6:00 PM, Junio C Hamano wrote:
Show 8 quoted lines
> "Sam G." <ceptorial@comcast.net> writes:
>
>> And, just in case, is there any way to
>> search raw objects for text, either commit text, file name or  
>> content?
>> Thanks very much!
>
> Or run "git lost-found" and grep for blobs in .git/lost-found/other/*

← back to recent threads