# git checkout --autostash and git branch --autopop

7 messages from 2019-12-12 to 2019-12-14. Participants: rottis@fea.st, Denton Liu, Philip Oakley, Junio C Hamano.
Thread: https://gitlist.dev/t/52438

## rottis@fea.st, 2019-12-12 12:19

Subject: git checkout --autostash and git branch --autopop
Message-ID: <8ab7d980-9584-4ce7-b4ee-9acac62c030c@www.fastmail.com>
URL: https://gitlist.dev/e/8ab7d980-9584-4ce7-b4ee-9acac62c030c%40www.fastmail.com

```
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, 2019-12-12 18:09

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <20191212180901.GA35927@generichostname>
URL: https://gitlist.dev/e/20191212180901.GA35927%40generichostname
In-Reply-To: <8ab7d980-9584-4ce7-b4ee-9acac62c030c@www.fastmail.com>

```
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, 2019-12-12 18:12

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <20191212181244.GA36165@generichostname>
URL: https://gitlist.dev/e/20191212181244.GA36165%40generichostname
In-Reply-To: <20191212180901.GA35927@generichostname>

```
On Thu, Dec 12, 2019 at 10:09:01AM -0800, Denton Liu wrote:
> 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, 2019-12-12 22:02

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <e7850a51-4396-4698-ed98-62f991e33992@iee.email>
URL: https://gitlist.dev/e/e7850a51-4396-4698-ed98-62f991e33992%40iee.email
In-Reply-To: <20191212180901.GA35927@generichostname>

```
On 12/12/2019 18:09, Denton Liu wrote:
> 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, 2019-12-13 17:16

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <xmqq7e30m9i4.fsf@gitster-ct.c.googlers.com>
URL: https://gitlist.dev/e/xmqq7e30m9i4.fsf%40gitster-ct.c.googlers.com
In-Reply-To: <e7850a51-4396-4698-ed98-62f991e33992@iee.email>

```
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, 2019-12-14 11:12

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <2e2c7d89-d820-0643-61f9-11e74ab4ab9f@iee.email>
URL: https://gitlist.dev/e/2e2c7d89-d820-0643-61f9-11e74ab4ab9f%40iee.email
In-Reply-To: <xmqq7e30m9i4.fsf@gitster-ct.c.googlers.com>

```
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

```

## Philip Oakley, 2019-12-14 12:58

Subject: Re: git checkout --autostash and git branch --autopop
Message-ID: <631f1c73-b85c-29f0-6259-5468dddcd0b8@iee.email>
URL: https://gitlist.dev/e/631f1c73-b85c-29f0-6259-5468dddcd0b8%40iee.email
In-Reply-To: <DA212C7D-D8D4-4E68-8C29-AF68364653E9@ssl-mail.com>

```
Hi Eeli,
 thanks for the clarification
cc'ing the list.

On 14/12/2019 11:58, Eeli wrote:
> 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?
>
> 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


```
