Subject: Re: 0-Based indexes for git log

From: Junio C Hamano <[email-masked]>
Date: Wed, 24 Sep 2025 09:53:05 -0700

Nico Williams <[email-masked]> writes:

> On Tue, Sep 23, 2025 at 05:15:46PM -0400, 𝕍𝕖𝕝𝕠𝕔𝕚𝕗𝕪𝕖𝕣 wrote:
>> In git log it uses a 1-based index for the date instead of a 0 based index.
>> So it says "Fri Sep 19 14:23:24 2025 -0400" when it should say "Fri Sep 18
>> 14:23:24 2025 -0400" (or "Friday 2025-8-18 14:23:24 (-4:00.00)"  to get a
>> better format)
>
> Day of month numbers are 1-based.

Correct.

There are a few things in Git that are 0 based, but not so many.

 * parent numbers are 1-based.  HEAD~1 is the "previous commit", aka
   "first parent".  HEAD~0 is the HEAD itself.

 * merge parent numbers are 2-based (sanity of this statement is
   already questionable).  If HEAD is a merge, HEAD~2 is the
   "(first) side branch that was merged", HEAD~3 is the "(second)
   side brnach that was merged (in an octopus merge), and so on.

 * reflog entries are 1-based.  @{1} is the "previous object pointed
   by the current branch", @{2} is one before that.  @{0} is the
   current branch itself.

 * stash entries are counted 0-based.  "git stash list" shows from
   stash@{0} that is the most recently created stash entry.