"D. Ben Knoble" <ben.knoble@xxxxxxxxx> writes: > With Git 2.48.1, I observe the following behavior: > > - "git ls-files :^:Documentation/RelNotes | grep Rel" yields > "RelNotes", as expected It is deliberately confusing to spell ":(exclude)" as ":^:". > - "git grep squash :^:Documentation/RelNotes" yields the error > > fatal: ambiguous argument ':^:Documentation/RelNotes': unknown > revision or path not in the working tree. I think if you write it in longhand, $ git grep squash ':(exclude)Documentation/RelNotes' you would not see such an error. The error message comes from setup.c:die_verify_filename(), I think, and setup.c:looks_like_pathspec() allows the control flow to avoid calling that filename verification code path. It knows to let the longhand magic pathspec go, and it may be trivial to teach it a shorthand magic too, but I offhand do not know the implications of such a change---there might be unintended consequences.