git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] push: fix --force-if-includes when remote-tracking ref has no reflog

From
Aleksei Sviridkin <f@lex.la>
Date
Sep 9, 2026, 06:56 UTC
Message-ID
<20260909065639.47316-1-f@lex.la>
In-Reply-To
<xmqqjyowz9oq.fsf@gitster.g>
Junio C Hamano <gitster@pobox.com> writes:
> It is only true for those who conciously disable the gc, isn't it?

No. The fallback is not about expiry, it is reached when the remote-tracking ref has no reflog, and a plain clone leaves it that way: after "git clone --no-local" on the files backend, "git reflog exists refs/remotes/origin/main" returns 1, with core.logAllRefUpdates at its default and gc untouched. The same source cloned with --ref-format=reftable gets one entry.

Nothing expires on a calendar either. Entries go when "git reflog expire" runs, and "git gc --auto" decides by loose object count (gc.auto, 6700), so a quiet repository expires nothing.

> Doesn't it force a behaviour that would happen only to those people
> who deliberately choose to ignore cutoff and who are willing to spend
> cycles to go back to the beginning of history, to all users,
> including those who do not make such customization, no?

Measured that. One repository, 20000 entries in the local branch's reflog, remote-tracking ref without a reflog, both values reject the push so only the work differs. Median of 7 runs:

  entries spread over 200 days      zero 0.325s   90 days 0.069s
  after "git reflog expire --all"   zero 0.070s   90 days 0.069s
  20000 entries inside 90 days      zero 0.319s   90 days 0.321s

The expire run left 5 of the 20000, since all but five are 100 to 200 days old here. So the cost lands only on a repository that still holds entries older than 90 days, which is the one where gc has not run.

In that repository, when the matching entry is one of the old ones, the same walk is what decides: zero accepts in 0.322s, 90 days rejects in 0.086s.

With no match it is 0.26s of extra work for the same answer.
Previous: Junio C HamanoNext: Junio C Hamano
Message 18 of 27 in “push: fix --force-if-includes when remote-tracking ref has no reflog”
  1. push: fix --force-if-includes when remote-tracking ref has no reflogAleksei Sviridkin, Sep 3, 2026
  2. Junio C HamanoSep 3, 2026
  3. Aleksei SviridkinSep 3, 2026
  4. Junio C HamanoSep 3, 2026
  5. Aleksei SviridkinSep 3, 2026
  6. Kristoffer HaugsbakkSep 4, 2026
  7. Junio C HamanoSep 4, 2026
  8. Aleksei SviridkinSep 5, 2026
  9. Kristoffer HaugsbakkSep 6, 2026
  10. Junio C HamanoSep 6, 2026
  11. Thomas BachemSep 7, 2026
  12. Weijie YuanSep 7, 2026
  13. push: fix --force-if-includes when remote-tracking ref has no reflogAleksei Sviridkin, Sep 4, 2026
  14. Junio C HamanoSep 4, 2026
  15. Junio C HamanoSep 6, 2026
  16. Aleksei SviridkinSep 6, 2026
  17. Junio C HamanoSep 8, 2026
  18. Aleksei SviridkinSep 9, 2026
  19. Junio C HamanoSep 10, 2026
  20. Aleksei SviridkinSep 10, 2026
  21. Tyler CiprianiSep 25, 2026
  22. Junio C HamanoSep 25, 2026
  23. push: fix --force-if-includes when remote-tracking ref has no reflogAleksei Sviridkin, Sep 5, 2026
  24. Tyler CiprianiSep 29, 2026
  25. Junio C HamanoSep 29, 2026
  26. push: fix --force-if-includes when remote-tracking ref has no reflogAleksei Sviridkin, Sep 29, 2026
  27. Junio C HamanoSep 29, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.