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

Re: why can't one alias `git stash`?

From
Christoph Anton Mitterer <calestyo@scientia.org>
Date
Aug 16, 2025, 01:35 UTC
Message-ID
<fdb7d4da229dc41302d1c17871674cb41d3956ce.camel@scientia.org>
In-Reply-To
<CABPp-BHt80YD9bzWeC+r5qxJ0Vp+zRsJZsKDU_GA39CXmuYe5A@mail.gmail.com>
On Thu, 2025-08-14 at 21:04 -0700, Elijah Newren wrote:
> No.  And there won't be one in the future either; see e.g.
> https://lore.kernel.org/git/alpine.DEB.1.00.0903070407480.10279@pacific.mpi-cbg.de/

At least the "it makes it hard for users to understand" argument seems a bit weak.

I mean isn't that's also the case with shell aliases and the whole point of them is to customise the behaviour for the user (which is btw also done by many git-config options, which another user that uses my settings may not be familiar with).

> And it'd mean that other folks who use git commands in their scripts
> now can't rely on any git commands doing what their documentation
> claims.
TBH, I wasn't even aware that git aliases are applied from scripts.

Isn't that anyway a pretty dangerous game? I mean I could define an alias that works right now, as it doesn't hid an actual command... my script relies on that alias working. And the next git version introduces a command of the same name (and my script breaks).

There's good reason that shell aliasing is per default not active in non-interactive shells.

Show 15 quoted lines
> Doesn't it detail what happens already?
> 
>            If the alias expansion is prefixed with an exclamation
> point, it will be treated as a shell command. For example, defining
> alias.new = !gitk --all --not
>            ORIG_HEAD, the invocation git new is equivalent to running
> the shell command gitk --all --not ORIG_HEAD. Note that shell
> commands
> will be executed from the
>            top-level directory of a repository, which may not
> necessarily be the current directory.  GIT_PREFIX is set as returned
> by running git rev-parse --show-prefix
>            from the original current directory. See git-rev-parse(1).
> 
> What is missing from this explanation?

Well, what I've said in my initial post. Is the shell execution environment in any way sanitised (like which IFS, PATH, whatever are set) or does it even share the env from some git shell script that may execute the alias shell command (as in dot sourcing). Perhaps also *which* shell is used? Is it always /bin/sh or whatever shell the user has configured as login shell? Will e.g. profile/rc files be loaded or not.

Admittedly some information might be overkill, but at least I'd wanna know if using the wrong function/var names in my alias command, could cause troubles for git.

Cheers, Chris.

Previous: Christoph Anton Mitterer
Message 12 of 12 in “why can't one alias `git stash`?”
  1. Christoph Anton MittererAug 15, 2025
  2. Junio C HamanoAug 15, 2025
  3. Christoph Anton MittererAug 15, 2025
  4. Elijah NewrenAug 15, 2025
  5. rsbecker@nexbridge.comAug 15, 2025
  6. Christoph Anton MittererAug 16, 2025
  7. Junio C HamanoAug 15, 2025
  8. Christoph Anton MittererAug 16, 2025
  9. Matthias AßhauerAug 16, 2025
  10. Junio C HamanoAug 19, 2025
  11. Christoph Anton MittererAug 19, 2025
  12. Christoph Anton MittererAug 16, 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.