Subject: Re: recover lost file

From: Junio C Hamano <[email-masked]>
Date: Fri, 10 Nov 2023 13:09:55 +0900

Malik Rumi <[email-masked]> writes:

> I am looking for a lost file that was accidentally deleted about 18
> months ago. The docs I consulted are version 2.42.1. The git on my
> machine is version 2.34.1
>
> I followed the instructions on this page”
> https://git-scm.com/book/en/v2/Git-Tools-Searching , the section “Line
> Log Search”. But I got an error.
>
> malikarumi@Tetuoan2:~/Projects/hattie$ git grep titlesplit
> malikarumi@Tetuoan2:~/Projects/hattie$ git grep filesplit
> malikarumi@Tetuoan2:~/Projects/hattie$ git log -L :titlesplit
> fatal: -L argument not 'start,end:file' or ':funcname:file': :titlesplit
> malikarumi@Tetuoan2:~/Projects/hattie$ git log -L :titlesplit:
> fatal: -L argument not 'start,end:file' or ':funcname:file': :titlesplit:
>
> I don’t know the purpose of the colon. Is it a boundary marker? Does
> it belong at the front of the search object, the end, or both?
> 'start,end:file' sounds like the error message expects me to provide a
> start and an end, to which the obvious reply is - If I knew where it
> was, I wouldn’t be trying to find it.

Whatever documenttion that gave you "-L" perhaps did not give you a
good example.  

    $ git log -L"20,+5:helloworld.c"
    $ git log -L"/^titlesplit(/,/^}/:helloworld.c"
    $ git log -L":titlesplit:helloworld.c"

are ways to follow, how the range of lines in the helloworld.c file
of the CURRENTLY CHECKED OUT version, came about throughout the
history, going backwards.  The way to specify the range in the
current version of helloworld.c file may be different (the examples
show "starting at line #20, for five lines", "starting at the line
that matches the pattern "^titlesplit(", and ending at the line that
matches the pattern "^}", or "the body of the 'titlesplit' function
(according to the xfuncname logic)"), but they share one important
detail that may make the feature unsuitable for your use case.  You
need to exactly know where in the current version of which file the
line range you want to follow resides, but from your description I
am getting an impression that you do not even know the name of the
file.

You only said "a lost file" without giving any specifics, so it is
totally unclear to readers of your message how strings like
"titlesplit" and "filesplit" relate to what you are looking for.  In
the above I randomly made a blind guess that it might be a function
name, but I may be totally off the mark.

 - Do you mean "I think the file I removed had a name with either
   titlesplit or filesplit in it?"

 - Or do you mean "I know that the file had a definition of a
   function whose name was either titlesplit or filesplit?"

 - Or something completely different from the above two?

If I know all of the followings are true:

 - I had the necessary contents committed in Git;

 - I do not remember the filename at all, but I am sure I deleted it
   and committed the deletion some time ago;

 - I know the lost contents I am looking for had a string "frotz" in
   it.

then I would probably try

    $ git log -Sfrotz --diff-filter=D -p

which will look for all file deletions throughout the history,
limiting the output to those that had string "frotz" in them.

But again, it is unclear what useful clue you have to locate the
lost file from your description, so ...