Thanks. Is there a more friendly way to do what I'm trying to express? Should I just use `rev-list -n1` instead? On Sat, Aug 20, 2022 at 3:59 PM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Tim Hockin <thockin@xxxxxxxxxx> writes: > > > ``` > > $ git rev-parse unknown-tag > > unknown-tag > > fatal: ambiguous argument 'unknown-tag': unknown revision or path not > > in the working tree. > > Use '--' to separate paths from revisions, like this: > > 'git <command> [<revision>...] -- [<file>...]' > > ``` > > > > OK > > > > ``` > > $ git rev-parse unknown-tag -- > > fatal: bad revision 'unknown-tag' > > ``` > > > > Much nicer error. But: > > > > ``` > > $ git rev-parse HEAD -- > > 113a928239196d0d9f70671517ce917071ceecf6 > > -- > > ``` > > > > That's not very nice. Why is "--" treated as an arg? > > > > ``` > > $ git rev-parse HEAD > > 113a928239196d0d9f70671517ce917071ceecf6 > > ``` > > > > Looking at rev-parse code it SEEMS to be intentional, but I can't > > comprehend why. > > Because the first function of "rev-parse" (among many others) is to > be a helper usable in scripted Porcelains to "parse" command line > arguments, shifting them into revs and "files". Without options > like --revs-only, --no-revs, --flags etc., it dumps everything, while > translating "revs" into raw object names, to its output. "--" is a > valid command line option for whatever scripted Porcelain you'd be > writing using "rev-parse" to help parsing its command line arguments. > > So everything we see above is very much working as designed. >