On 2025-05-09 at 16:53:17, D. Ben Knoble wrote: > - Can't we "git push <remote> stash[@{n}]:<branch>" to share a stash somewhere? > - And then, doesn't "git stash apply [--index] <arbitrary sha>" work? > (At which point you could presumably create a new stash, though I'll > admit that's cumbersome relative to dedicated export/import.) I haven't tried, but it does certainly seem plausible that you can import and export them in that way. > I can see how that doesn't help you quickly export a whole _chain_ of > stashes, so I'm not saying "this series seems like the wrong tack" > (far be it from me, who doesn't understand your use case, to say > that!). Rather, I'm confused about the inability to move a (single) > stash across machines. Let me explain the intended use case here. At work, many people use GitHub Codespaces, which are throwaway development environments. Since one's whole set of stashes cannot be imported or exported, it's hard to use stashes effectively in such a case, since they'd be deleted when you destroyed the environment. I like stashes a lot (my personal Git development repository has 153), so I want to synchronize all of them across. The other case is people who routinely work on multiple machines. (Remote or throwaway development environments, like GitHub Codespaces or Devcontainers, are just a special case of this.) Many of these users want to keep their working tree and other state across machines and lots of them rely on cloud syncing services, such as Dropbox, to do this, which often ends up corrupting the repository (as outlined in the FAQ). Providing a way to quickly and easily synchronize the working tree across systems, including any stashes, is really important to encourage best practices that don't result in data loss or have unpleasant security issues (such as untrusted local config). > Unrelated question: Can we import arbitrary refs into stashes? That > is, what happens if the commit structure doesn't look right? (Maybe I > should go read the tests and see.) That doesn't work because the commit used here has to have a fixed number of parents, since we need to keep track of the index and the working tree. Stash commits, even the regular ones used in the reflog, always have to have a certain structure. If you try to do that anyway, you get this message: % git stash import HEAD error: 3bf235c35ef51d01663f2ab9665026b05b8af1dd is not a valid exported stash commit I did try to avoid people accidentally destroying data. -- brian m. carlson (they/them) Toronto, Ontario, CA
Attachment:
signature.asc
Description: PGP signature