Re: --no-decorate and %d in git-log(1)
- From
Marc Branchaud <marcnarc@xiplink.com>
- Date
- Feb 25, 2026, 21:46 UTC
- Message-ID
- <cf3d274e-7363-4557-809a-a649b1d304ad@xiplink.com>
- In-Reply-To
- <xmqqcy1sa8mx.fsf@gitster.g>
On 2026-02-25 13:08, Junio C Hamano wrote:
Show 17 quoted lines
> Marc Branchaud <marcnarc@xiplink.com> writes: > >> BTW, --decorate=auto is documented as "if the output is going to a >> terminal, the ref names are shown as if `short` were given, otherwise no >> ref names are shown." But in my experiments %d still shows refs even >> when the output is piped to a file. Seems like another symptom of the >> same bug? > > Isn't that documentation merely referring to "git log" without > "--format=... %d ..." and not about the case where you explicitly > ask for "%d"? That is, the description is there to explain the > differences between > > git log --oneline --decorate=auto -1 > git log --oneline --decorate=auto -1 | cat > > isn't it?
I'm sure that's how the code works, but I don't see any indication in the documentation that this is for when --format isn't used or when the format doesn't contain %d. The descriptions of --decorate and --format mostly just ignore each other.
We do have this at the end of the --format section:
The %d and %D placeholders will use the "short" decoration format if --decorate was not already provided on the command line.
Given this documented connection between %d/%D and --decorate, it seems reasonable for a reader to assume that --decorate=auto would do the same thing regardless of whether or not a --format=...%d... was present.
Show 9 quoted lines
> I think --decorate=auto is the default so the above > without --decorate=auto would behave similarly. > >> (Do people who use `--format` (with or without %d) *also* use >> `--decorate`? It seems like the two are naturally exclusive, even if >> the code allows them both.) > > That is an interesting question, but I am not sure if it affects how > we decide to resolve this discussion.
Yeah, it's more philosophical, though if we did know the answer was "the two are almost never used together" we'd be more comfortable changing how --decorate=no and --format=%d interact.
I note that currently --decorate has no effect at all if the --format doesn't contain %d or %D. To me this bolsters the argument for making --decorate=no suppress %d/%D.
To expand on my earlier point: --decorate=no currently has the same effect on %d/%D as --decorate=short, so it seems to me that we can change what --decorate=no does because if anyone needs to preserve the existing behavior for their favorite --format they can just use --decorate=short. (I'd be surprised if anyone is using --decorate=no to ensure that they get the short ref names).
M.