Re: accessing oldest reflog entry with ref@{N}?

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: accessing oldest reflog entry with ref@{N}?

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:50

SZEDER Gábor [off-list ref] writes:
$ git log --oneline -1 master@{1}
fatal: Log for 'master' only has 1 entries.

Annoyed, I just copy-pasted the sha and got the job done.

However, I wonder why it didn't worked. 'git reflog' didn't print
master@{1} or any message for the oldest entry, but I can live without
that.
There lies your answer, no?

Each of the log entry records "this was before, and this is after
the change".  ref@{0} reads from the "after" field of 0-th (from the
end) entry. ref@{1} reads from the "after" field of 1-st (again from
the end) entry.  ref@{N} reads from the "after" field of N-th (again
from the end) entry.

Notice that nowhere in the above sequence we read from "before" field.

Re: accessing oldest reflog entry with ref@{N}?

From: Jeff King <hidden>
Date: 2016-06-15 22:57:50

On Wed, Jun 19, 2013 at 11:48:01AM -0700, Junio C Hamano wrote:
SZEDER Gábor [off-list ref] writes:
quoted
$ git log --oneline -1 master@{1}
fatal: Log for 'master' only has 1 entries.

Annoyed, I just copy-pasted the sha and got the job done.

However, I wonder why it didn't worked. 'git reflog' didn't print
master@{1} or any message for the oldest entry, but I can live without
that.
There lies your answer, no?

Each of the log entry records "this was before, and this is after
the change".  ref@{0} reads from the "after" field of 0-th (from the
end) entry. ref@{1} reads from the "after" field of 1-st (again from
the end) entry.  ref@{N} reads from the "after" field of N-th (again
from the end) entry.

Notice that nowhere in the above sequence we read from "before" field.
In general, the "before" from entry @{N} should be the same as the
"after" of @{N+1}. Of course this is not always the case for various
reasons, the most common of which I think are:

  1. Buggy scripts which do not provide a reflog reason for their call
     to git-update-ref, and therefore update the ref without writing a
     reflog entry.

  2. A git-gc will expire entries which point to unreachable objects
     much earlier, which can create "holes" in the reflog.

So it is certainly not correct to say "we do not have a master@{1}
entry, but we know that the 'before' entry of master@{0} must point to
the same thing". But it is very often a good guess. I wonder if there
should be some simple way to expose that value as an @{}-selector.
Perhaps "ref@{0.before}" or something?

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help