Hi, On Wed, Mar 6, 2024 at 11:59 PM Kristoffer Haugsbakk <code@xxxxxxxxxxxxxxx> wrote: > > On Tue, Mar 5, 2024, at 08:40, Stefan Haller wrote: > > Coming back to this after almost a year, I can say that I'm still > > running into this problem relatively frequently, and it is annoying > > every single time. Excluding refs pointing at the current head from > > being updated, as proposed above, would be a big usability improvement > > for me. > > Sounds like a ref-stash command is in order… A what? > # I want a new branch > git checkout -b new > # But I don’t want it to be affected by the next rebase This doesn't make any sense; rebase always operates on the current branch, and Stefan wasn't asking for anything otherwise. He was just concerned that with --update-refs, one of the other branches it also operated on was one he didn't want it to operate on. Perhaps you meant git branch new for your first command? > git ref-stash push > git rebase [...] > # Now I’m done: put the ref back where it was > git ref-stash pop Leaving aside questions about how ref-stash is supposed to interact with each and every other command out there, and how it's supposed to know which branches it's operating on when you do pushes and pops... Why do we need to invent a new command, when we already have the reflog? You could drop both ref-stash commands, and instead just have a git branch -f new new@{1} at the end (assuming of course "git branch new" was used instead of your "git checkout -b new", as I suggested earlier) to put "new" back to where it was before the rebase. That's fewer commands. Or, even simpler, drop the initial branch creation and both ref-stash commands by just not creating the branch until after the rebase. That'd make the entire set of commands just be: git rebase --update-refs [...] git branch new current_branch@{1} Plus, either solution works today and needs no new changes.