whatchanged: hint about git-log(1) and aliasing

There have been quite a few `--i-still-use-this` user reports since Git 2.51.0 was released.[1][2] And it doesn’t seem like they are reading the man page about the git-log(1) equivalent. Tell them what options to plug into git-log(1), either as a replacement command or as an alias.[3] That template produces almost the same output[4] and is arguably a plug-in replacement. Concretely, add an optional `hint` argument so that we can use it right after the initial error line. Also mention the same concrete options in the documentation while we’re at it. [1]: E.g., • https://lore.kernel.org/git/e1a69dea-bcb6-45fc-83d3-9e50d32c410b@5y5.one/ • https://lore.kernel.org/git/1011073f-9930-4360-a42f-71eb7421fe3f@chrispalmer.uk/#t • https://lore.kernel.org/git/9fcbfcc4-79f9-421f-b9a4-dc455f7db485@acm.org/#t • https://lore.kernel.org/git/83241BDE-1E0D-489A-9181-C608E9FCC17B@gmail.com/ [2]: The error message on 2.51.0 does tell them to report it, unconditionally [3]: We allow aliasing deprecated builtins now for people who are very used to the command name or just like it a lot [4]: You only get different outputs if you happen to have empty commits (no changes)[4] [5]: https://lore.kernel.org/git/20250825085428.GA367101@coredump.intra.peff.net/ Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Kristoffer Haugsbakk committed Sep 17, 2025 at 22:24 UTC 5a31252702da61ddabc68f3f8ac7a2cffc19a542
5 files changed +24 -8
Documentation/git-whatchanged.adoc
+5 -1
@@ -24,7 +24,11 @@ Shows commit logs and diff output each commit introduces.
24
25 New users are encouraged to use linkgit:git-log[1] instead. The
26 `whatchanged` command is essentially the same as linkgit:git-log[1]
27 -but defaults to showing the raw format diff output and skipping merges.
27 +but defaults to showing the raw format diff output and skipping merges:
28 +
29 +----
30 +git log --raw --no-merges
31 +----
32
33 The command is primarily kept for historical reasons; fingers of
34 many people who learned Git long before `git log` was invented by
builtin/log.c
+7 -1
@@ -543,7 +543,13 @@ int cmd_whatchanged(int argc,
543 cmd_log_init(argc, argv, prefix, &rev, &opt, &cfg);
544
545 if (!cfg.i_still_use_this)
546 - you_still_use_that("git whatchanged");
546 + you_still_use_that("git whatchanged",
547 + _("\n"
548 + "hint: You can replace 'git whatchanged <opts>' with:\n"
549 + "hint:\tgit log <opts> --raw --no-merges\n"
550 + "hint: Or make an alias:\n"
551 + "hint:\tgit config set --global alias.whatchanged 'log --raw --no-merges'\n"
552 + "\n"));
553
554 if (!rev.diffopt.output_format)
555 rev.diffopt.output_format = DIFF_FORMAT_RAW;
builtin/pack-redundant.c
+1 -1
@@ -626,7 +626,7 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix UNUSED, s
626 }
627
628 if (!i_still_use_this)
629 - you_still_use_that("git pack-redundant");
629 + you_still_use_that("git pack-redundant", NULL);
630
631 if (load_all_packs)
632 load_all();
git-compat-util.h
+1 -1
@@ -460,7 +460,7 @@ void warning_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));
460
461 void show_usage_if_asked(int ac, const char **av, const char *err);
462
463 -NORETURN void you_still_use_that(const char *command_name);
463 +NORETURN void you_still_use_that(const char *command_name, const char *hint);
464
465 #ifndef NO_OPENSSL
466 #ifdef APPLE_COMMON_CRYPTO
usage.c
+10 -4
@@ -376,7 +376,8 @@ void bug_fl(const char *file, int line, const char *fmt, ...)
376 va_end(ap);
377 }
378
379 -NORETURN void you_still_use_that(const char *command_name)
379 +
380 +NORETURN void you_still_use_that(const char *command_name, const char *hint)
381 {
382 struct strbuf percent_encoded = STRBUF_INIT;
383 strbuf_add_percentencode(&percent_encoded,
@@ -384,8 +385,13 @@ NORETURN void you_still_use_that(const char *command_name)
385 STRBUF_ENCODE_SLASH);
386
387 fprintf(stderr,
387 - _("'%s' is nominated for removal.\n"
388 - "If you still use this command, here's what you can do:\n"
388 + _("'%s' is nominated for removal.\n"), command_name);
389 +
390 + if (hint)
391 + fputs(hint, stderr);
392 +
393 + fprintf(stderr,
394 + _("If you still use this command, here's what you can do:\n"
395 "\n"
396 "- read https://git-scm.com/docs/BreakingChanges.html\n"
397 "- check if anyone has discussed this on the mailing\n"
@@ -395,7 +401,7 @@ NORETURN void you_still_use_that(const char *command_name)
401 " know that you still use this command and were unable\n"
402 " to determine a suitable replacement\n"
403 "\n"),
398 - command_name, percent_encoded.buf);
404 + percent_encoded.buf);
405 strbuf_release(&percent_encoded);
406 die(_("refusing to run without --i-still-use-this"));
407 }