# [RFC] Delete current branch

10 messages from 2013-07-19 to 2013-07-19. Participants: Ramkumar Ramachandra, Andreas Schwab, Junio C Hamano, Taylor Hedberg.
Thread: https://gitlist.dev/t/34489

## Ramkumar Ramachandra, 2013-07-19 10:35

Subject: [RFC] Delete current branch
Message-ID: <CALkWK0=8q4J2yi2to_+41kJSA5E59CBwkG69Hj7MmTPgUnSh5Q@mail.gmail.com>
URL: https://gitlist.dev/e/CALkWK0%3D8q4J2yi2to_%2B41kJSA5E59CBwkG69Hj7MmTPgUnSh5Q%40mail.gmail.com

```
Hi,

Many of my ideas turn out to be really stupid, and I need to throw
away my feature branch.  So, I find myself doing this often:

  # on branch menuconfig-jk
  $ git checkout master
  $ git branch -D<BACKSAPCE>
  # er, what was the branch name again?
  $ git checkout -
  # Ah
  $ git checkout master
  $ git branch -D menuconfig-jk

So, I scripted it for myself.  Perhaps we should get the functionality
in core as `git branch -Dc` (c for "current"; or something)?

Also, perhaps a `git describe -` corresponding to `git checkout -`?
Then I can use it with --contains --all to get the name of the
previous branch.

Thanks.

```

## Andreas Schwab, 2013-07-19 14:28

Subject: Re: [RFC] Delete current branch
Message-ID: <87y592y67f.fsf@igel.home>
URL: https://gitlist.dev/e/87y592y67f.fsf%40igel.home
In-Reply-To: <CALkWK0=8q4J2yi2to_+41kJSA5E59CBwkG69Hj7MmTPgUnSh5Q@mail.gmail.com>

```
Ramkumar Ramachandra <artagnon@gmail.com> writes:

>   # er, what was the branch name again?
>   $ git checkout -

You could take a look in the reflog.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

```

## Ramkumar Ramachandra, 2013-07-19 14:35

Subject: Re: [RFC] Delete current branch
Message-ID: <CALkWK0kGF+d8Jk-TVfb6iwk6LuOcD-Uuuj6DHf-4YeVAFLSvuw@mail.gmail.com>
URL: https://gitlist.dev/e/CALkWK0kGF%2Bd8Jk-TVfb6iwk6LuOcD-Uuuj6DHf-4YeVAFLSvuw%40mail.gmail.com
In-Reply-To: <87y592y67f.fsf@igel.home>

```
Andreas Schwab wrote:
> Ramkumar Ramachandra <artagnon@gmail.com> writes:
>
>>   # er, what was the branch name again?
>>   $ git checkout -
>
> You could take a look in the reflog.

Yeah, or use the @{-N} revision to do that for me.  My scripted
version is essentially:

  test "true" = "$(git rev-parse --is-inside-work-tree 2>/dev/null)" || exit 1
  git checkout master
  git branch -D @{-1}

The main problem is the hard-coding of "master": I suppose I could
replace that with @{-1} too.

Not a big deal: I was just wondering if others use it often enough for
it to become `branch -Dc` in core; @{-N} is quite obscure.

```

## Junio C Hamano, 2013-07-19 15:08

Subject: Re: [RFC] Delete current branch
Message-ID: <7vr4euy4c6.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vr4euy4c6.fsf%40alter.siamese.dyndns.org
In-Reply-To: <CALkWK0=8q4J2yi2to_+41kJSA5E59CBwkG69Hj7MmTPgUnSh5Q@mail.gmail.com>

```
Ramkumar Ramachandra <artagnon@gmail.com> writes:

> Many of my ideas turn out to be really stupid, and I need to throw
> away my feature branch.  So, I find myself doing this often:
>
>   # on branch menuconfig-jk
>   $ git checkout master
>   $ git branch -D<BACKSAPCE>
>   # er, what was the branch name again?
>   $ git checkout -
>   # Ah
>   $ git checkout master
>   $ git branch -D menuconfig-jk
>
> So, I scripted it for myself.  Perhaps we should get the functionality
> in core as `git branch -Dc` (c for "current"; or something)?

What branch will I be on after doing that?  Detached at that branch?

> Also, perhaps a `git describe -` corresponding to `git checkout -`

Did you know that the general way to spell the branch previously you
were on is "@{-1}" and "checkout -" is an ugly special case that is
possible only because "checkout" does not happen to take a "-" as a
valid argument that means something else (like the more usual "read
from standard input")?

Perhaps 

	$ git branch -D @{-1}

would have worked without <BACKSPACE> and everything that follows.

```

## Ramkumar Ramachandra, 2013-07-19 15:42

Subject: Re: [RFC] Delete current branch
Message-ID: <CALkWK0m-q=Aoof62zhXnUYsJ7PQZwTLbQ50BUEmufVO4gtWNUA@mail.gmail.com>
URL: https://gitlist.dev/e/CALkWK0m-q%3DAoof62zhXnUYsJ7PQZwTLbQ50BUEmufVO4gtWNUA%40mail.gmail.com
In-Reply-To: <7vr4euy4c6.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano wrote:
> Did you know that the general way to spell the branch previously you
> were on is "@{-1}" and "checkout -" is an ugly special case that is
> possible only because "checkout" does not happen to take a "-" as a
> valid argument that means something else (like the more usual "read
> from standard input")?

I disagree that it is ugly: it's a very commonly used shortcut that I
like.  I love it so much that I have the following in my ~/.zshrc:

function - () {
	if test "true" = "$(g rp --is-inside-work-tree 2>/dev/null)"; then
		g co -
	else
		cd - >/dev/null
	fi
}

So, I just

  $ -

to switch back and forth :)

```

## Junio C Hamano, 2013-07-19 16:48

Subject: Re: [RFC] Delete current branch
Message-ID: <7vppuewl6h.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vppuewl6h.fsf%40alter.siamese.dyndns.org
In-Reply-To: <CALkWK0m-q=Aoof62zhXnUYsJ7PQZwTLbQ50BUEmufVO4gtWNUA@mail.gmail.com>

```
Ramkumar Ramachandra <artagnon@gmail.com> writes:

> Junio C Hamano wrote:
>> Did you know that the general way to spell the branch previously you
>> were on is "@{-1}" and "checkout -" is an ugly special case that is
>> possible only because "checkout" does not happen to take a "-" as a
>> valid argument that means something else (like the more usual "read
>> from standard input")?
>
> I disagree that it is ugly: it's a very commonly used shortcut that I
> like.

It does not matter if you like it or not ;-).

I do agree that "checkout -" is 100% more pleasing to the eye than
"checkout @{-1}" from visual "prettyness" point of view.

But there is a very commonly accepted long tradition for "-" to mean
"read from the standard input", so we cannot reuse it to mean "the
branch I was previously on" for every command without first making
sure the command will never want to use "-" for the other common
purpose.

That limits the context we could use "-" and we cannot consistently
use it everywhere. I find _that_ ugly from the "design cleanliness"
point of view.

```

## Ramkumar Ramachandra, 2013-07-19 16:50

Subject: Re: [RFC] Delete current branch
Message-ID: <CALkWK0kdCFn6YevL5nZXwYQ2u+2RdvQqEXEiVfyeXhrq_QG7AQ@mail.gmail.com>
URL: https://gitlist.dev/e/CALkWK0kdCFn6YevL5nZXwYQ2u%2B2RdvQqEXEiVfyeXhrq_QG7AQ%40mail.gmail.com
In-Reply-To: <7vppuewl6h.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano wrote:
> That limits the context we could use "-" and we cannot consistently
> use it everywhere. I find _that_ ugly from the "design cleanliness"
> point of view.

Right, noted.

```

## Taylor Hedberg, 2013-07-19 17:08

Subject: Re: [RFC] Delete current branch
Message-ID: <20130719170830.GD5999@euporie>
URL: https://gitlist.dev/e/20130719170830.GD5999%40euporie
In-Reply-To: <7vppuewl6h.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano, Fri 2013-07-19 @ 09:48:06-0700:
> But there is a very commonly accepted long tradition for "-" to mean
> "read from the standard input", so we cannot reuse it to mean "the
> branch I was previously on" for every command without first making
> sure the command will never want to use "-" for the other common
> purpose.

It may be worth noting that Bash (and probably other shells as well)
allow you to type `cd -` to switch back to the previous working
directory. I always (apparently mistakenly) assumed that
`git checkout -` was deliberately designed to mirror that shortcut. I
think the symmetry gives it some credibility, in any case. This
alternative meaning for - is not totally without precedent.

What would it mean to check out the standard input, anyway? I cannot see
how that could ever make sense, unless `git checkout` gains some
additional capaabilities that are unrelated to its current purpose.
Maybe I am just being myopic, though.

```

## Junio C Hamano, 2013-07-19 19:15

Subject: Re: [RFC] Delete current branch
Message-ID: <7vy592uzsz.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vy592uzsz.fsf%40alter.siamese.dyndns.org
In-Reply-To: <20130719170830.GD5999@euporie>

```
Taylor Hedberg <tmhedberg@gmail.com> writes:

> Junio C Hamano, Fri 2013-07-19 @ 09:48:06-0700:
>> But there is a very commonly accepted long tradition for "-" to mean
>> "read from the standard input", so we cannot reuse it to mean "the
>> branch I was previously on" for every command without first making
>> sure the command will never want to use "-" for the other common
>> purpose.
> ...
> What would it mean to check out the standard input, anyway?

That is my point exactly, isn't it?

You have to ask that question "What would it mean to do X on the
standard input?" for every operation X you might want to use the
short-cut "-" for.

```

## Junio C Hamano, 2013-07-19 22:52

Subject: Re: [RFC] Delete current branch
Message-ID: <7vmwpitb6k.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vmwpitb6k.fsf%40alter.siamese.dyndns.org
In-Reply-To: <7vppuewl6h.fsf@alter.siamese.dyndns.org>

```
Junio C Hamano <gitster@pobox.com> writes:

> Ramkumar Ramachandra <artagnon@gmail.com> writes:
>
>> Junio C Hamano wrote:
>>> Did you know that the general way to spell the branch previously you
>>> were on is "@{-1}" and "checkout -" is an ugly special case that is
>>> possible only because "checkout" does not happen to take a "-" as a
>>> valid argument that means something else (like the more usual "read
>>> from standard input")?
>>
>> I disagree that it is ugly: it's a very commonly used shortcut that I
>> like.
>
> It does not matter if you like it or not ;-).
>
> I do agree that "checkout -" is 100% more pleasing to the eye than
> "checkout @{-1}" from visual "prettyness" point of view.
>
> But there is a very commonly accepted long tradition for "-" to mean
> "read from the standard input", so we cannot reuse it to mean "the
> branch I was previously on" for every command without first making
> sure the command will never want to use "-" for the other common
> purpose.
>
> That limits the context we could use "-" and we cannot consistently
> use it everywhere. I find _that_ ugly from the "design cleanliness"
> point of view.

Having said all that.

d18ba221 (sha1_name: support @{-N} syntax in get_sha1(), 2009-01-17)
was primarily for the follow-up patch 696acf45 (checkout: implement
"-" abbreviation, add docs and tests, 2009-01-17).  Two years after
them, we finally did 4e8115ff (merge: allow "-" as a short-hand for
"previous branch", 2011-04-07).

There is no reason we cannot continue.

As long as the addition is carefully prepared so that we know it
will not conflict (or be confused by users) with possible other uses
of "-", I do not think we would mind "git branch -D -" and other
commands to learn "-" as a synonym for @{-1}.

```
