N_("git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <name> <url>"),
        N_("git remote rename <old> <new>"),
        N_("git remote remove <name>"),
-       N_("git remote set-head <name> (-a | -d | <branch>)"),
+       N_("git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"),
        N_("git remote [-v | --verbose] show [-n] <name>"),
        N_("git remote prune [-n | --dry-run] <name>"),
        N_("git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"),
 };
 
 static const char * const builtin_remote_sethead_usage[] = {
-       N_("git remote set-head <name> (-a | -d | <branch>)"),
+       N_("git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"),
        NULL
 };
 
        int i;
 
        struct option options[] = {
-               OPT_BOOLEAN('f', "fetch", &fetch, N_("fetch the remote branches")),
+               OPT_BOOL('f', "fetch", &fetch, N_("fetch the remote branches")),
                OPT_SET_INT(0, "tags", &fetch_tags,
                            N_("import all tags and associated objects when fetching"),
                            TAGS_SET),
        argc = parse_options(argc, argv, NULL, options, builtin_remote_add_usage,
                             0);
 
-       if (argc < 2)
+       if (argc != 2)
                usage_with_options(builtin_remote_add_usage, options);
 
        if (mirror && master)
 {
        int no_query = 0, result = 0, query_flag = 0;
        struct option options[] = {
-               OPT_BOOLEAN('n', NULL, &no_query, N_("do not query remotes")),
+               OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
                OPT_END()
        };
        struct ref_states states;
        char *head_name = NULL;
 
        struct option options[] = {
-               OPT_BOOLEAN('a', "auto", &opt_a,
-                           N_("set refs/remotes/<name>/HEAD according to remote")),
-               OPT_BOOLEAN('d', "delete", &opt_d,
-                           N_("delete refs/remotes/<name>/HEAD")),
+               OPT_BOOL('a', "auto", &opt_a,
+                        N_("set refs/remotes/<name>/HEAD according to remote")),
+               OPT_BOOL('d', "delete", &opt_d,
+                        N_("delete refs/remotes/<name>/HEAD")),
                OPT_END()
        };
        argc = parse_options(argc, argv, NULL, options, builtin_remote_sethead_usage,
 {
        int i, prune = 0;
        struct option options[] = {
-               OPT_BOOLEAN('p', "prune", &prune,
-                           N_("prune remotes after fetching")),
+               OPT_BOOL('p', "prune", &prune,
+                        N_("prune remotes after fetching")),
                OPT_END()
        };
        const char **fetch_argv;
 {
        int add_mode = 0;
        struct option options[] = {
-               OPT_BOOLEAN('\0', "add", &add_mode, N_("add branch")),
+               OPT_BOOL('\0', "add", &add_mode, N_("add branch")),
                OPT_END()
        };
 
        int urlset_nr;
        struct strbuf name_buf = STRBUF_INIT;
        struct option options[] = {
-               OPT_BOOLEAN('\0', "push", &push_mode,
-                           N_("manipulate push URLs")),
-               OPT_BOOLEAN('\0', "add", &add_mode,
-                           N_("add URL")),
-               OPT_BOOLEAN('\0', "delete", &delete_mode,
+               OPT_BOOL('\0', "push", &push_mode,
+                        N_("manipulate push URLs")),
+               OPT_BOOL('\0', "add", &add_mode,
+                        N_("add URL")),
+               OPT_BOOL('\0', "delete", &delete_mode,
                            N_("delete URLs")),
                OPT_END()
        };