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

Re: [RFC] git stash: add porcelain for sharing stashes through remotes

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Sep 29, 2026, 22:19 UTC
Message-ID
<arw5XxJPNlUxU8TS@fruit.crustytoothpaste.net>
In-Reply-To
<CAKPibBw2XxjGpE_DZrWLZmMHs7kAyvOaP8504kfoh61c4UkGyg@mail.gmail.com>
On 2026-09-28 at 14:27:23, Hanan Arshad wrote:
Show 12 quoted lines
> Hi,
> 
> I'd like to propose adding a small porcelain workflow for sharing
> stashes through a Git remote.
> 
> git stash export and git stash import already provide a transportable
> representation of stashes. I tested the following workflow using
> existing commands:
> 
> Alice:
>   git stash export --print stash@{0}
>   git push origin <export-tip>:refs/stashes/alice/wip
You can also use `--to-ref`, which is what I use, and then push that.
Show 13 quoted lines
> Bob:
>   git fetch origin refs/stashes/alice/wip:refs/shared-stashes/origin/alice/wip
>   git stash import refs/shared-stashes/origin/alice/wip
> The imported stash is a normal local stash and retains the original
> stash object ID. Removing the remote ref afterward does not affect
> Bob's imported stash.
> 
> I'd like to add porcelain around this existing mechanism for four operations:
> 
> 1- publish a selected stash to a remote
> 2- list available shared stashes
> 3- get a shared stash as a normal local stash
> 4- remove a shared stash from the remote

I think that at least 1 is useful here, but you're going to need some sort of customization. The name I use for stashes when I am the only person on the remote is not the same name I use when I'm sharing a remote with others at my employer.

2 is going to be hard because you don't know whether a ref is a stash without downloading the data. 3 is also hard because there's no standard namespacing and it's going to differ based on the context (such as refs/heads/bk2204/stash or refs/heads/stash). 4 isn't that difficult.

Show 6 quoted lines
> This would not introduce a new stash object format, server-side
> service, or synchronization model. It would essentially compose the
> existing export/import mechanism with normal push/fetch operations.
> Before working on an implementation, I'd appreciate feedback on a few
> design points:
> 1- What remote ref namespace would be appropriate?
Again, this is going to depend on the user and environment.
> 2- Should shared stashes use an explicit user-provided name or an
> object-derived identifier?

Names are going to be nicer. We don't require people to memorize object IDs and allow them to use branch and tag names.

> 3- Should listing only inspect remote refs, or fetch the export
> commits so stash messages can also be displayed?

Stashes can be large because they (a) can contain untracked files and (b) contain a reference to history, so inspecting only remote refs is going to be a lot lighter.

> 4- What command naming would fit best with the existing git stash interface?
Probably `git stash push` or something like that.

I think some nicer tooling would be helpful, so I'm in favour of that, but I'm not sure that standardization is going to be possible.

-- 
brian m. carlson (they/them)
Toronto, Ontario, CA
Previous: Hanan ArshadNext: Hanan Arshad
Message 2 of 10 in “[RFC] git stash: add porcelain for sharing stashes through remotes”
  1. Hanan ArshadSep 28, 2026
  2. brian m. carlsonSep 29, 2026
  3. Hanan ArshadOct 5, 2026
  4. Johannes SixtOct 5, 2026
  5. Hanan ArshadOct 5, 2026
  6. Johannes SixtOct 5, 2026
  7. Hanan ArshadOct 5, 2026
  8. Junio C HamanoOct 5, 2026
  9. Hanan ArshadOct 7, 2026
  10. Johannes SixtOct 7, 2026

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.