Re: Bug: Hierarchical Aliases no longer work in 2.54.0
- From
René Scharfe <l.s.r@web.de>
- Date
- Apr 23, 2026, 21:36 UTC
- Message-ID
- <ea07acab-313d-435d-8328-e601fee980c3@web.de>
- In-Reply-To
- <PH7PR12MB73313034573C59C73F821BBFE52A2@PH7PR12MB7331.namprd12.prod.outlook.com>
On 4/23/26 8:19 PM, Grossfeld, Michael wrote:
Show 24 quoted lines
> 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".
Show 10 quoted lines
> 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?
Show 27 quoted lines
> [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