From: Marc Branchaud Date: Wed, 25 Feb 2026 21:46:10 GMT Subject: Re: --no-decorate and %d in git-log(1) Message-ID: In-Reply-To: On 2026-02-25 13:08, Junio C Hamano wrote: > Marc Branchaud 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. > 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.