<feed xmlns='http://www.w3.org/2005/Atom'>
<title>git/git.c, branch main</title>
<subtitle>Fork of git SCM with my patches.</subtitle>
<id>http://git.kilabit.info/git/atom?h=main</id>
<link rel='self' href='http://git.kilabit.info/git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/'/>
<updated>2026-03-24T19:26:58Z</updated>
<entry>
<title>use strvec_pushv() to add another strvec</title>
<updated>2026-03-24T19:26:58Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-03-24T19:26:58Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=250e977a2b0aa8cc1c8063c64c44597a166e79f5'/>
<id>urn:sha1:250e977a2b0aa8cc1c8063c64c44597a166e79f5</id>
<content type='text'>
Add and apply a semantic patch that simplifies the code by letting
strvec_pushv() append the items of a second strvec instead of pushing
them one by one.

Suggested-by: Junio C Hamano &lt;gitster@pobox.com&gt;
Signed-off-by: René Scharfe &lt;l.s.r@web.de&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'jh/alias-i18n-fixes'</title>
<updated>2026-03-10T21:23:24Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-03-10T21:23:23Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=42afcb954bd4a69deba0a7b9823a9307b4223136'/>
<id>urn:sha1:42afcb954bd4a69deba0a7b9823a9307b4223136</id>
<content type='text'>
Further update to the i18n alias support to avoid regressions.

* jh/alias-i18n-fixes:
  doc: fix list continuation in alias.adoc
  git, help: fix memory leaks in alias listing
  alias: treat empty subsection [alias ""] as plain [alias]
  doc: fix list continuation in alias subsection example
</content>
</entry>
<entry>
<title>Merge branch 'ar/config-hooks'</title>
<updated>2026-03-10T21:23:18Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2026-03-10T21:23:18Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=f330d46deeb143b6109143f37a47d025475d11d6'/>
<id>urn:sha1:f330d46deeb143b6109143f37a47d025475d11d6</id>
<content type='text'>
Allow hook commands to be defined (possibly centrally) in the
configuration files, and run multiple of them for the same hook
event.

* ar/config-hooks:
  hook: add -z option to "git hook list"
  hook: allow out-of-repo 'git hook' invocations
  hook: allow event = "" to overwrite previous values
  hook: allow disabling config hooks
  hook: include hooks from the config
  hook: add "git hook list" command
  hook: run a list of hooks to prepare for multihook support
  hook: add internal state alloc/free callbacks
</content>
</entry>
<entry>
<title>git, help: fix memory leaks in alias listing</title>
<updated>2026-02-26T21:07:24Z</updated>
<author>
<name>Jonatan Holmgren</name>
<email>jonatan@jontes.page</email>
</author>
<published>2026-02-26T20:53:28Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=cdef6255095251500cc7d08d304072e1e2fa0bbd'/>
<id>urn:sha1:cdef6255095251500cc7d08d304072e1e2fa0bbd</id>
<content type='text'>
The list_aliases() function sets the util pointer of each list item to
a heap-allocated copy of the alias command value.  Two callers failed
to free these util pointers:

 - list_cmds() in git.c collects a string list with STRING_LIST_INIT_DUP
   and clears it with string_list_clear(&amp;list, 0), which frees the
   duplicated strings (strdup_strings=1) but not the util pointers.
   Pass free_util=1 to free them.

 - list_cmds_by_config() in help.c calls string_list_sort_u(list, 0) to
   deduplicate the list before processing completion.commands overrides.
   When duplicate entries are removed, the util pointer of each discarded
   item is leaked because free_util=0.  Pass free_util=1 to free them.

Reported-by: Jacob Keller &lt;jacob.e.keller@intel.com&gt;
Signed-off-by: Jonatan Holmgren &lt;jonatan@jontes.page&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>hook: allow out-of-repo 'git hook' invocations</title>
<updated>2026-02-19T21:24:39Z</updated>
<author>
<name>Emily Shaffer</name>
<email>emilyshaffer@google.com</email>
</author>
<published>2026-02-18T22:23:51Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=b51e238ddf896439d2746b883d892f8f9bba649f'/>
<id>urn:sha1:b51e238ddf896439d2746b883d892f8f9bba649f</id>
<content type='text'>
Since hooks can now be supplied via the config, and a config can be
present without a gitdir via the global and system configs, we can start
to allow 'git hook run' to occur without a gitdir. This enables us to do
things like run sendemail-validate hooks when running 'git send-email'
from a nongit directory.

It still doesn't make sense to look for hooks in the hookdir in nongit
repos, though, as there is no hookdir.

Signed-off-by: Emily Shaffer &lt;emilyshaffer@google.com&gt;
Signed-off-by: Adrian Ratiu &lt;adrian.ratiu@collabora.com&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>builtin: add new "history" command</title>
<updated>2026-01-13T13:41:17Z</updated>
<author>
<name>Patrick Steinhardt</name>
<email>ps@pks.im</email>
</author>
<published>2026-01-13T09:54:38Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=a675183d483cb106c076395936cd9e602ae94404'/>
<id>urn:sha1:a675183d483cb106c076395936cd9e602ae94404</id>
<content type='text'>
When rewriting history via git-rebase(1) there are a few very common use
cases:

  - The ordering of two commits should be reversed.

  - A commit should be split up into two commits.

  - A commit should be dropped from the history completely.

  - Multiple commits should be squashed into one.

  - Editing an existing commit that is not the tip of the current
    branch.

While these operations are all doable, it often feels needlessly kludgey
to do so by doing an interactive rebase, using the editor to say what
one wants, and then perform the actions. Also, some operations like
splitting up a commit into two are way more involved than that and
require a whole series of commands.

Rebases also do not update dependent branches. The use of stacked
branches has grown quite common with competing version control systems
like Jujutsu though, so it clearly is a need that users have. While
rebases _can_ serve this use case if one always works on the latest
stacked branch, it is somewhat awkward and very easy to get wrong.

Add a new "history" command to plug these gaps. This command will have
several different subcommands to imperatively rewrite history for common
use cases like the above.

Signed-off-by: Patrick Steinhardt &lt;ps@pks.im&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>Merge branch 'kh/you-still-use-whatchanged-fix'</title>
<updated>2025-10-02T19:26:12Z</updated>
<author>
<name>Junio C Hamano</name>
<email>gitster@pobox.com</email>
</author>
<published>2025-10-02T19:26:12Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=7ae9eaf806b00b6e46acc7609a8a1b9771b2012a'/>
<id>urn:sha1:7ae9eaf806b00b6e46acc7609a8a1b9771b2012a</id>
<content type='text'>
The "do you still use it?" message given by a command that is
deeply deprecated and allow us to suggest alternatives has been
updated.

* kh/you-still-use-whatchanged-fix:
  BreakingChanges: remove claim about whatchanged reports
  whatchanged: remove not-even-shorter clause
  whatchanged: hint about git-log(1) and aliasing
  you-still-use-that??: help the user help themselves
  t0014: test shadowing of aliases for a sample of builtins
  git: allow alias-shadowing deprecated builtins
  git: move seen-alias bookkeeping into handle_alias(...)
  git: add `deprecated` category to --list-cmds
  Makefile: don’t add whatchanged after it has been removed
</content>
</entry>
<entry>
<title>git: allow alias-shadowing deprecated builtins</title>
<updated>2025-09-17T20:47:23Z</updated>
<author>
<name>Kristoffer Haugsbakk</name>
<email>code@khaugsbakk.name</email>
</author>
<published>2025-09-17T20:24:14Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=bf68b116997a0471dfccf7dcced00eb7d8b66982'/>
<id>urn:sha1:bf68b116997a0471dfccf7dcced00eb7d8b66982</id>
<content type='text'>
git-whatchanged(1) is deprecated and you need to pass
`--i-still-use-this` in order to force it to work as before.
There are two affected users, or usages:

1. people who use the command in scripts; and
2. people who are used to using it interactively.

For (1) the replacement is straightforward.[1]  But people in (2) might
like the name or be really used to typing it.[3]

An obvious first thought is to suggest aliasing `whatchanged` to the
git-log(1) equivalent.[1]  But this doesn’t work and is awkward since you
cannot shadow builtins via aliases.

Now you are left in an uncomfortable limbo; your alias won’t work until
the command is removed for good.

Let’s lift this limitation by allowing *deprecated* builtins to be
shadowed by aliases.

The only observed demand for aliasing has been for git-whatchanged(1),
not for git-pack-redundant(1).  But let’s be consistent and treat all
deprecated commands the same.

[1]:

        git log --raw --no-merges

     With a minor caveat: you get different outputs if you happen to
     have empty commits (no changes)[2]
[2]: https://lore.kernel.org/git/20250825085428.GA367101@coredump.intra.peff.net/
[3]: https://lore.kernel.org/git/BL3P221MB0449288C8B0FA448A227FD48833AA@BL3P221MB0449.NAMP221.PROD.OUTLOOK.COM/

Based-on-patch-by: Jeff King &lt;peff@peff.net&gt;
Signed-off-by: Kristoffer Haugsbakk &lt;code@khaugsbakk.name&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>git: move seen-alias bookkeeping into handle_alias(...)</title>
<updated>2025-09-17T20:47:23Z</updated>
<author>
<name>Kristoffer Haugsbakk</name>
<email>code@khaugsbakk.name</email>
</author>
<published>2025-09-17T20:24:13Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=b4f9282d8db88619b2becac7f4ee2cad75a72ff9'/>
<id>urn:sha1:b4f9282d8db88619b2becac7f4ee2cad75a72ff9</id>
<content type='text'>
We are about to complicate the command handling by allowing *deprecated*
builtins to be shadowed by aliases.  We need to organize the code in
order to facilitate that.[1]

The code in the `while(1)` speculatively adds commands to the list
before finding out if it’s an alias.  Let’s instead move it inside
`handle_alias(...)`—where it conceptually belongs anyway—and in turn
only run this logic when we have found an alias.[2]

[1]: We will do that with an additional call to `handle_alias(1)` inside
    the loop.  *Not* moving this code leaves a blind spot; we will miss
    alias looping crafted via deprecated builtin names
[2]: Also rename the list to a more descriptive name

Based-on-patch-by: Jeff King &lt;peff@peff.net&gt;
Signed-off-by: Kristoffer Haugsbakk &lt;code@khaugsbakk.name&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
<entry>
<title>git: add `deprecated` category to --list-cmds</title>
<updated>2025-09-17T20:47:22Z</updated>
<author>
<name>Kristoffer Haugsbakk</name>
<email>code@khaugsbakk.name</email>
</author>
<published>2025-09-17T20:24:12Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/git/commit/?id=5f31632ed7d8c2928b5cdd7a1358367415d24535'/>
<id>urn:sha1:5f31632ed7d8c2928b5cdd7a1358367415d24535</id>
<content type='text'>
With 145 builtin commands (according to `git --list-cmds=builtins`),
users are probably not keeping on top of which ones (if any) are
deprecated.

Let’s expand the experimental `--list-cmds`[1] to allow users and
programs to query for this information.  We will also use this in an
upcoming commit to implement `is_deprecated_command`.

[1]: Using something which is experimental to query for deprecations is
    perhaps not the most ideal approach, but it is simple to implement
    and better than having to scan the documentation

Acked-by: Patrick Steinhardt &lt;ps@pks.im&gt;
Helped-by: Patrick Steinhardt &lt;ps@pks.im&gt;
Signed-off-by: Kristoffer Haugsbakk &lt;code@khaugsbakk.name&gt;
Signed-off-by: Junio C Hamano &lt;gitster@pobox.com&gt;
</content>
</entry>
</feed>
