On Sun, Mar 25, 2018 at 12:10 AM, Jeff King <peff@xxxxxxxx> wrote: > Alternatively, we could at least detect the situation that confused you: > > diff --git a/builtin/branch.c b/builtin/branch.c > @@ -676,6 +676,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix) > + if (list && reflog) > + die(_("--reflog in list mode does not make sense")); > + > > That doesn't help somebody mistakenly doing "git branch -l foo", but > more likely they'd do "git branch -l jk/*" if they were trying to list > branches (and then "branch" would barf with "that's not a valid branch > name", though that may still leave them quite confused). Assuming that existing clients of "-l" (if there are any) only invoke "git branch -l <name>" to create a new branch, then it would be possible to interpret "-l" as --list when <name> is an existing branch. That is, the "-l" in "git branch -l" and "git branch -l <existing-branch>..." is recognized as --list, and (for backward compatibility only) the "-l" in "git branch -l <new-branch>" is still recognized as --create-reflog. This idea falls flat, however, if there are clients out there which actually depend upon "git branch -l <existing-branch>" failing.