Subject: Re: Bug: Hierarchical Aliases no longer work in 2.54.0

From: René Scharfe <[email-masked]>
Date: Thu, 23 Apr 2026 23:36:39 +0200

On 4/23/26 8:19 PM, Grossfeld, Michael wrote:
> Hello all! Seeing this issue on 2.54.0 and it didn't look like anyone had reported it yet.
> 
>> What did you do before the bug happened? (Steps to reproduce your issue)
> 
> Attempting to use the hierarchical alias "pull.sub", which was working in 2.53.0, is no longer working in 2.54.0.
> It returns the following error: "git: 'pull.sub' is not a git command. See 'git --help'."
> >> What did you expect to happen? (Expected behavior)
> 
> The git alias should have firsted pulled, then updated submodules recursively.
> 
>> What happened instead? (Actual behavior)
> 
> It reports the following error: "git: 'pull.sub' is not a git command. See 'git --help'."
> 
>> What's different between what you expected and what actually happened?
> 
> git 2.53.0 to git 2.54.0.
> 
>> Anything else you want to add:
> 
> The alias was defined in my gitconfig as in 2.53.0, and remains this way:
> 
> [alias "pull"]
>         sub = "!f() { git pull origin --recurse-submodules=no --ff-only; echo Updating Submodules...; git submodule update --recursive --jobs=16 --progress; }; f"

Broken by ac1f12a9de4 (alias: support non-alphanumeric names via
subsection syntax, 2026-02-18).

Alias sections were not documented before.  How did you discover them?

I think the previous behavior can be brought back while keeping the
new feature, except for aliases that end in ".command".

> It was written via this command:
>         git config --global alias.pull.sub '!f() { git pull origin --recurse-submodules=no --ff-only -p; echo Updating Submodules...; git submodule update --recursive --jobs=16; }; f'
> 
> Trying to do the following (with .command):
>         git config --global alias.pull.sub.command '!f() { git pull origin --recurse-submodules=no --ff-only -p; echo Updating Submodules...; git submodule update --recursive --jobs=16; }; f'
> 
> Results in a section of the gitconfig that looks like this:
> 
> [alias "pull.sub"]
>         command = "!f() { git pull origin --recurse-submodules=no --ff-only -p; echo Updating Submodules...; git submodule update --recursive --jobs=16; }; f"

Which works, right?

> [System Info]
> git version:
> git version 2.54.0.windows.1
> cpu: x86_64
> built from commit: 2b8a3ab140826ac423c2845ef81d4c6ac4f7bf3c
> sizeof-long: 4
> sizeof-size_t: 8
> shell-path: D:/git-sdk-64-build-installers/usr/bin/sh
> rust: disabled
> feature: fsmonitor--daemon
> gettext: enabled
> libcurl: 8.19.0
> OpenSSL: OpenSSL 3.5.6 7 Apr 2026
> zlib: 1.3.2
> SHA-1: SHA1_DC
> SHA-256: SHA256_BLK
> default-ref-format: files
> default-hash: sha1
> uname: Windows 10.0 26200
> compiler info: gnuc: 15.2
> libc info: no libc information available
> $SHELL (typically, interactive shell): D:\develop\tools\Git\usr\bin\bash.exe
> 
> Thanks for the help!
> 
> Michael Grossfeld
> AMD