I was using `git range-diff`:[1] $ git range-diff main feature-v2 HEAD And got an error message: fatal: need two commit ranges I intended to give three arguments to the command. I started to wonder if I maybe had just typed `main feature-v2` (forgot the third argument). No, it was three arguments. The problem was that I had mistyped one argument; it was `feature-v3`, not `feature-v2`. I thought that this error message was a little misleading or too generic. I looked at the history of the file (`builtin/range-diff.c`) and saw this commit: b75747829f (range-diff: optionally accept pathspecs, 2022-08-26). Maybe it works better with a `pathspec` marker (`--`)? $ git range-diff HEAD main feature-v2 -- fatal: not a revision: 'feature-v2' usage: git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip> or: git range-diff [<options>] <old-tip>...<new-tip> or: git range-diff [<options>] <base> <old-tip> <new-tip> Yes it does: `not a revision: 'feature-v2'`. So I tried to contrast the behavior on the current release with the behavior on the release before the aforementioned commit. $ git checkout v2.40.0 $ make clean $ NO_CURL=true make -j 4 $ # Misspelled ref `seen` as `seent` $ ./bin-wrappers/git range-diff master next seent fatal: need two commit ranges usage: git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip> or: git range-diff [<options>] <old-tip>...<new-tip> or: git range-diff [<options>] <base> <old-tip> <new-tip> […] Expected behavior: tell me that `seent` is not a revision. Actual behavior: generic error message. But I get a nice error message if I append `--`: $ ./bin-wrappers/git range-diff master next seent -- fatal: not a revision: 'seent' usage: git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip> or: git range-diff [<options>] <old-tip>...<new-tip> or: git range-diff [<options>] <base> <old-tip> <new-tip> Contrast the behavior on `v2.37.2`, which is one of the tags before rev. b75747829f (range-diff: optionally accept pathspecs, 2022-08-26). $ git checkout v2.37.2 $ make clean $ NO_CURL=true make -j 4 $ ./bin-wrappers/git range-diff master next seent fatal: not a revision: 'seent' usage: git range-diff [<options>] <old-base>..<old-tip> <new-base>..<new-tip> or: git range-diff [<options>] <old-tip>...<new-tip> or: git range-diff [<options>] <base> <old-tip> <new-tip> […] $ # Tag before rev. b75747829f (range-diff: optionally $ # accept pathspecs, 2022-08-26) $ git checkout v2.37.2 $ ./bin-wrappers/git range-diff HEAD master seent fatal: ambiguous argument 'HEAD..seent': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' error: could not parse log for 'HEAD..seent' This error message is exactly what I expect to see when I mistype a ref (my git(1) conditioning). But the `v2.40.0` error message with `--` is better: `fatal: not a revision: 'seent'`. So what if I give a `--`: $ # Still on v2.37.2 $ ./bin-wrappers/git range-diff master next seent -- fatal: ambiguous argument 'master..seent': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]' error: could not parse log for 'master..seent' It’s the same. Oh, right—I guess rev. b75747829f taught `range-diff` about `--`. In conclusion: IMO and assuming that my cross-version testing is correct, `range-diff` has a slight usability regression for when you mistype the ref. It would be nice if the error message without a pathspec separator (`--`/`dash_dash`) was as nice as the one without it. [1]: Original thread: https://groups.google.com/g/git-users/c/O5uB-E68S_0 -- Kristoffer Haugsbakk