git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/4] builtins: show help on "-h"/"--help-all" with more than 2 arguments left

From
D. Ben Knoble <ben.knoble+github@gmail.com>
Date
Jul 26, 2025, 16:53 UTC
Message-ID
<20250726165320.4039-5-ben.knoble+github@gmail.com>
In-Reply-To
<20250726165320.4039-1-ben.knoble+github@gmail.com>

When asking for short help on a previous command, the user may use their shell history to recall a command like

    git rebase new-base
Then inserting "-h" after "rebase" doesn't yield the help; make it so.
Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
---
Notes:
    I reviewed the following results
    
        git grep '[^[:alpha:]-]-h' 'Documentation/**adoc' ':(exclude)Documentation/RelNotes'
    
    The 2 commands that accept "-h" to mean other things are git-grep(1) and
    git-ls-remote(1).
    
    - "git grep -h 123" gives results sans filenames, while a lone "-h"
      gives help. Behavior is unchanged from 2.48.1 (my local install).
    - "git ls-remote -h" gives help; "git ls-remote -h origin" lists heads.
      Behavior is unchanged from 2.48.1.
    
    But I'd welcome a more thorough check to make sure I didn't overlook
    things. This is probably the most controversial patch, and if it's
    dropped, that would be alright (though it is helpful for me to reduce
    typing).
 builtin/merge-recursive.c | 2 +-
 git.c                     | 2 +-
 parse-options.c           | 2 +-
 usage.c                   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c
index 17aa4db37a..c433d26bdf 100644
--- a/builtin/merge-recursive.c
+++ b/builtin/merge-recursive.c
@@ -38,7 +38,7 @@ int cmd_merge_recursive(int argc,
 	if (argv[0] && ends_with(argv[0], "-subtree"))
 		o.subtree_shift = "";
 
-	if (argc == 2 && (!strcmp(argv[1], "-h") ||
+	if (argc >= 2 && (!strcmp(argv[1], "-h") ||
 			  !strcmp(argv[1], "--help-all"))) {
 		struct strbuf msg = STRBUF_INIT;
 		strbuf_addf(&msg, builtin_merge_recursive_usage, argv[0]);
diff --git a/git.c b/git.c
index 40d3df1b76..7fe4e15e2d 100644
--- a/git.c
+++ b/git.c
@@ -445,7 +445,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv, struct
 	const char *prefix;
 	int run_setup = (p->option & (RUN_SETUP | RUN_SETUP_GENTLY));
 
-	help = argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help-all"));
+	help = argc >= 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help-all"));
 	if (help && (run_setup & RUN_SETUP))
 		/* demote to GENTLY to allow 'git cmd -h' outside repo */
 		run_setup = RUN_SETUP_GENTLY;
diff --git a/parse-options.c b/parse-options.c
index e3ed42f709..b9a31c261c 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -1464,7 +1464,7 @@ void show_usage_with_options_if_asked(int ac, const char **av,
 				      const char * const *usagestr,
 				      const struct option *opts)
 {
-	if (ac == 2) {
+	if (ac >= 2) {
 		if (!strcmp(av[1], "-h")) {
 			usage_with_options_internal(NULL, usagestr, opts, style_normal, to_out);
 			exit(129);
diff --git a/usage.c b/usage.c
index 4c245ba0cb..244e8d37ed 100644
--- a/usage.c
+++ b/usage.c
@@ -192,7 +192,7 @@ static void show_usage_if_asked_helper(const char *err, ...)
 
 void show_usage_if_asked(int ac, const char **av, const char *err)
 {
-	if (ac == 2 && (!strcmp(av[1], "-h") ||
+	if (ac >= 2 && (!strcmp(av[1], "-h") ||
 			!strcmp(av[1], "--help-all")))
 		show_usage_if_asked_helper(err);
 }
-- 
2.48.1
Previous: D. Ben KnobleNext: Junio C Hamano
Message 12 of 30 in “permit -h/--help-all in more scenarios”
  1. 0/4 permit -h/--help-all in more scenariosD. Ben Knoble, Jul 26, 2025
  2. 1/4 t1517: fixup for ua/t1517-short-help-testsD. Ben Knoble, Jul 26, 2025
  3. Usman AkinyemiJul 26, 2025
  4. Junio C HamanoJul 28, 2025
  5. 2/4 parse-options: name flags passed to usage_with_options_internalD. Ben Knoble, Jul 26, 2025
  6. Junio C HamanoJul 28, 2025
  7. Junio C HamanoJul 28, 2025
  8. D. Ben KnobleJul 30, 2025
  9. 3/4 builtin: also setup gently for --help-allD. Ben Knoble, Jul 26, 2025
  10. Junio C HamanoJul 28, 2025
  11. D. Ben KnobleJul 30, 2025
  12. 4/4 builtins: show help on "-h"/"--help-all" with more than 2 arguments leftD. Ben Knoble, Jul 26, 2025
  13. Junio C HamanoJul 27, 2025
  14. D. Ben KnobleJul 30, 2025
  15. Jeff KingAug 2, 2025
  16. D. Ben KnobleAug 2, 2025
  17. Jeff KingAug 2, 2025
  18. D. Ben KnobleAug 2, 2025
  19. 0/3 permit -h/--help-all in more scenariosD. Ben Knoble, Aug 3, 2025
  20. 0/3 permit -h/--help-all in more scenariosD. Ben Knoble, Aug 3, 2025
  21. Junio C HamanoAug 4, 2025
  22. D. Ben KnobleAug 5, 2025
  23. 1/3 t1517: fixup for ua/t1517-short-help-testsD. Ben Knoble, Aug 3, 2025
  24. Junio C HamanoAug 3, 2025
  25. D. Ben KnobleAug 3, 2025
  26. 2/3 parse-options: refactor flags for usage_with_options_internalD. Ben Knoble, Aug 3, 2025
  27. 3/3 builtin: also setup gently for --help-allD. Ben Knoble, Aug 3, 2025
  28. 1/3 t1517: fixup for ua/t1517-short-help-testsD. Ben Knoble, Aug 3, 2025
  29. 2/3 parse-options: refactor flags for usage_with_options_internalD. Ben Knoble, Aug 3, 2025
  30. 3/3 builtin: also setup gently for --help-allD. Ben Knoble, Aug 3, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.