From: Elijah Newren Date: Wed, 24 Dec 2025 03:32:28 GMT Subject: Possible regression: lost diagnostic message when pushing non-commit objects to refs/heads/* Message-ID: 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?