From: Denton Liu Date: Sun, 03 Jan 2021 01:24:09 GMT Subject: Re: [PATCH] refs: allow @{n} to work with n-sized reflog Message-ID: In-Reply-To: <0c6885f15f5ce0be28142d9c69724362e72481a9.1609551262.git.liu.denton@gmail.com> 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 > Signed-off-by: Denton Liu I forgot to mention that the original thread that spawned this idea is here: https://lore.kernel.org/git/xmqqzh8zgcfp.fsf@gitster.c.googlers.com/