threads / discuss / 52438

git checkout --autostash and git branch --autopop

Subject: git checkout --autostash and git branch --autopop

## tl;dr

7 messages between Dec 12, 2019 and Dec 14, 2019.

replies: 6people: 4as markdown or json

rottis@fea.st· Dec 12, 2019, 12:19 UTC · lore
Hello,
I'm not sure if this has been discussed in the past, but I would like to humbly request this feature. Let me explain:

Similar to the 'git rebase --autostash', running 'git checkout --autostash' would automatically stash uncommitted changes for the current branch. then running 'git branch --autopop' would automatically apply an automatic stash when switching to a branch that had one.

Thank you.
Denton Liu· Dec 12, 2019, 18:09 UTC · re: rottis@fea.st · lore

Re: git checkout --autostash and git branch --autopop

Hi rottis,
On Thu, Dec 12, 2019 at 02:19:50PM +0200, rottis@fea.st wrote:
> Similar to the 'git rebase --autostash', running 'git checkout --autostash' would automatically stash uncommitted changes for the
> current branch.  then running 'git branch --autopop' would automatically apply an automatic stash when switching to a branch that had one.

I currently have a WIP version of this feature but I haven't had enough time to polish it off (tests and docs). The last RFC round can be seen here[1] if you want to test it out. It seems to work well enough for personal use.

[1]: https://lore.kernel.org/git/cover.1571246693.git.liu.denton@gmail.com/
Denton Liu· Dec 12, 2019, 18:12 UTC · re: Denton Liu · lore

Re: git checkout --autostash and git branch --autopop

On Thu, Dec 12, 2019 at 10:09:01AM -0800, Denton Liu wrote:
Show 10 quoted lines
> Hi rottis,
> 
> On Thu, Dec 12, 2019 at 02:19:50PM +0200, rottis@fea.st wrote:
> > Similar to the 'git rebase --autostash', running 'git checkout --autostash' would automatically stash uncommitted changes for the
> > current branch.  then running 'git branch --autopop' would automatically apply an automatic stash when switching to a branch that had one.
> 
> I currently have a WIP version of this feature but I haven't had enough
> time to polish it off (tests and docs). The last RFC round can be seen
> here[1] if you want to test it out. It seems to work well enough for
> personal use.

Sorry, my mistake. I misread your message; my topic was for `git merge --autostash`. However, it does generalise the autostash machinery so perhaps it'll be simpler to implement it into checkout in the future, if that's desired?

Philip Oakley· Dec 12, 2019, 22:02 UTC · re: Denton Liu · lore

Re: git checkout --autostash and git branch --autopop

On 12/12/2019 18:09, Denton Liu wrote:
Show 11 quoted lines
> Hi rottis,
>
> On Thu, Dec 12, 2019 at 02:19:50PM +0200, rottis@fea.st wrote:
>> Similar to the 'git rebase --autostash', running 'git checkout --autostash' would automatically stash uncommitted changes for the
>> current branch.  then running 'git branch --autopop' would automatically apply an automatic stash when switching to a branch that had one.
> I currently have a WIP version of this feature but I haven't had enough
> time to polish it off (tests and docs). The last RFC round can be seen
> here[1] if you want to test it out. It seems to work well enough for
> personal use.
>
> [1]: https://lore.kernel.org/git/cover.1571246693.git.liu.denton@gmail.com/

Isn't this meant to be something similar to the --no-merge option for checkout. That is: I am where I am, but really I want this to be on branch X. Or is the --no-merge option meant to be something else? -- Philip

Junio C Hamano· Dec 13, 2019, 17:16 UTC · re: Philip Oakley · lore

Re: git checkout --autostash and git branch --autopop

Philip Oakley <philipoakley@iee.email> writes:
> Isn't this meant to be something similar to the --no-merge option for
> checkout. That is: I am where I am, but really I want this to be on
> branch X. Or is the --no-merge option meant to be something else?

Is there a --no-merge option to "git checkout"? I know the reason why I invented "git checkout --merge" was because I wanted the command to carry more changes in the working tree than the default behaviour would while checking out another branch, but I do not think I added an option to do less, i.e. forbid it from carrying any change in the working tree while checking out another branch.

Philip Oakley· Dec 14, 2019, 11:12 UTC · re: Junio C Hamano · lore

Re: git checkout --autostash and git branch --autopop

On 13/12/2019 17:16, Junio C Hamano wrote:
Show 6 quoted lines
> Philip Oakley <philipoakley@iee.email> writes:
>
>> Isn't this meant to be something similar to the --no-merge option for
>> checkout. That is: I am where I am, but really I want this to be on
>> branch X. Or is the --no-merge option meant to be something else?
> Is there a --no-merge option to "git checkout"?  

My mistake. I misremembered or misunderstood. I'd been looking at both checkout and branch man pages to see if there was a way out of the do the 'rewind current branch and create new branch at current state' dance. I thought I'd seen 'no-merge' as a 'checkout -b' style option.

Show 6 quoted lines
> I know the reason
> why I invented "git checkout --merge" was because I wanted the
> command to carry more changes in the working tree than the default
> behaviour would while checking out another branch, but I do not
> think I added an option to do less, i.e. forbid it from carrying any
> change in the working tree while checking out another branch.

For creating a new branch when in a dirty state (based on some other start point than HEAD), there should be an option for numpties that have already started digging the hole for themselves (stick's hand up apologetically)...

I was hoping that @rottis would clarify if his request has the same symptoms.

--
Philip
Philip Oakley· Dec 14, 2019, 12:58 UTC · lore

Re: git checkout --autostash and git branch --autopop

Hi Eeli,
 thanks for the clarification
cc'ing the list.
On 14/12/2019 11:58, Eeli wrote:
Show 5 quoted lines
> Often in my work I need to checkout my coworkers’ branches. When that happens, I will likely have some uncommitted changes I would need to commit or stash.
>
> This purely an ergonomic feature I’m suggesting.
>
> So instead of git stash or git commit -m ”wip” and later git stash pop or git reset HEAD~1, I could just run git checkout -b —autostash other-branch, do the work on the other branch and return to my previous state with git checkout —autopop my-branch.

Also, c/would a detached head (rather than using -b) be part of the options if you are just doing a review?

Show 34 quoted lines
>
> Apologies if I messed up my Git usage, I have used Git through Magit for too long.
>
>> On 14. Dec 2019, at 1.12 PM, Philip Oakley <philipoakley@iee.email> wrote:
>>
>> On 13/12/2019 17:16, Junio C Hamano wrote:
>>> Philip Oakley <philipoakley@iee.email> writes:
>>>
>>>> Isn't this meant to be something similar to the --no-merge option for
>>>> checkout. That is: I am where I am, but really I want this to be on
>>>> branch X. Or is the --no-merge option meant to be something else?
>>> Is there a --no-merge option to "git checkout"?  
>> My mistake. I misremembered or misunderstood. I'd been looking at both
>> checkout and branch man pages to see if there was a way out of the do
>> the 'rewind current branch and create new branch at current state'
>> dance. I thought I'd seen 'no-merge' as a 'checkout -b' style option.
>>
>>> I know the reason
>>> why I invented "git checkout --merge" was because I wanted the
>>> command to carry more changes in the working tree than the default
>>> behaviour would while checking out another branch, but I do not
>>> think I added an option to do less, i.e. forbid it from carrying any
>>> change in the working tree while checking out another branch.
>> For creating a new branch when in a dirty state (based on some other
>> start point than HEAD), there should be an option for numpties that have
>> already started digging the hole for themselves (stick's hand up
>> apologetically)...
>>
>> I was hoping that @rottis would clarify if his request has the same
>> symptoms.
>>
>> --
>>
>> Philip

← back to recent threads