On Fri, Jan 01, 2021 at 05:36:06PM -0800, Denton Liu wrote: > This sequence works > > $ git checkout -b newbranch > $ git commit --allow-empty -m one > $ git show -s newbranch@{1} > > and shows the state that was immediately after the newbranch was > created. > > But then if you do > > $ git reflog expire --expire=now refs/heads/newbranch > $ git commit --allow=empty -m two > $ git show -s newbranch@{1} > > you'd be scolded with > > fatal: log for 'newbranch' only has 1 entries > > While it is true that it has only 1 entry, we have enough > information in that single entry that records the transition between > the state in which the tip of the branch was pointing at commit > 'one' to the new commit 'two' built on it, so we should be able to > answer "what object newbranch was pointing at?". But we refuse to > do so. > > Make @{0} the special case where we use the new side to look up that > entry. Otherwise, look up @{n} using the old side of the (n-1)th entry > of the reflog. > > Suggested-by: Junio C Hamano <gitster@xxxxxxxxx> > Signed-off-by: Denton Liu <liu.denton@xxxxxxxxx> I forgot to mention that the original thread that spawned this idea is here: https://lore.kernel.org/git/xmqqzh8zgcfp.fsf@xxxxxxxxxxxxxxxxxxxxxx/