On Tue, Jan 02, 2024 at 07:18:48AM -0800, Karthik Nayak wrote: > > As "git for-each-ref" takes pattern that is prefix match, e.g., > > > > $ git for-each-ref refs/remotes/ > > > > shows everything like refs/remotes/origin/main that begins with > > refs/remotes/, I wonder if > > > > $ git for-each-ref "" > > > > should mean what you are asking for. After all, "git for-each-ref" > > does *not* take "--branches" and others like "git log" family to > > limit its operation to subhierarchy of "refs/" to begin with. > > But I don't think using an empty pattern is the best way to go forward. > This would break the pattern matching feature. For instance, what if the > user wanted to print all refs, but pattern match "*_HEAD"? > > Would that be > > $ git for-each-ref "" "*_HEAD" > > I think this would be confusing, since the first pattern is now acting > as an option, since its not really filtering rather its changing the > search space. > > Maybe "--all-refs" or "--all-ref-types" instead? I tend to agree that the special empty pattern would be a good shorthand for listing all references underneath refs/, including any top-level psuedo-refs. But I don't think that I quite follow what Karthik is saying here. for-each-ref returns the union of references that match the given pattern(s), not their intersection. So if you wanted to list just the psudo-refs ending in '_HEAD', you'd do: $ git for-each-ref "*_HEAD" I think if you wanted to list all pseudo-refs, calling the option `--pseudo-refs` seems reasonable. But if you want to list some subset of psueod-refs matching a given pattern, you should specify that pattern directly. Thanks, Taylor