Possible regression: lost diagnostic message when pushing non-commit objects to refs/heads/*
- From
Elijah Newren <newren@gmail.com>
- Date
- Dec 24, 2025, 03:32 UTC
- Message-ID
- <CABPp-BGL2tJR4dPidQuFcp-X0_VkVTknCY-0Zgo=jHVGv_P=wA@mail.gmail.com>
Hi,
git used to have better diagnostics about pushing non-commit objects to refs/heads/*, dating all the way back to c3b0dec509fe (Be more careful about updating refs, 2008-01-15):
$ git --version && git push . tagit:old git version 2.50.1 Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) remote: error: cannot update ref 'refs/heads/old': trying to write non-commit object d19968fcf0d3193147b827c9e89668d619afd01e to branch 'refs/heads/old' To . ! [remote rejected] tagit -> old (failed to update ref) error: failed to push some refs to '.'
Unfortunately, the "trying to write non-commit object" error is no longer shown:
$ git --version && git push . tagit:old git version 2.51.0 Total 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) To . ! [remote rejected] tagit -> old (invalid new value provided) error: failed to push some refs to '.'
The relevant error message is still part of the code: $ git grep "write non-commit object" -- '*.c' refs/files-backend.c: "trying to write non-commit object %s to branch '%s'", refs/reftable-backend.c: strbuf_addf(err, _("trying to write non-commit object %s to branch '%s'"),
but the error message isn't displayed. Bisecting shows that this started with commit 9d2962a7c44 ("receive-pack: use batched reference updates", 2025-05-19). That commit message to me suggests that while error handling was necessarily changed, that dropping the errors was not intentional:
``` As using batched updates requires the error handling to be moved to the end of the flow, create and use a 'struct strset' to track the failed refs and attribute the correct errors to them. ```
But it's possible I'm reading it wrong. Was it intentional, or is this a regression?