threads / rfc / 34489

[RFC] Delete current branch

Subject: [RFC] Delete current branch

## tl;dr

10 messages between Jul 19, 2013 and Jul 19, 2013.

replies: 9people: 4as markdown or json

Ramkumar Ramachandra· Jul 19, 2013, 10:35 UTC · lore
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· Jul 19, 2013, 14:28 UTC · re: Ramkumar Ramachandra · lore

Re: [RFC] Delete current branch

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· Jul 19, 2013, 14:35 UTC · re: Andreas Schwab · lore

Re: [RFC] Delete current branch

Andreas Schwab wrote:
Show 6 quoted lines
> 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· Jul 19, 2013, 15:08 UTC · re: Ramkumar Ramachandra · lore

Re: [RFC] Delete current branch

Ramkumar Ramachandra <artagnon@gmail.com> writes:
Show 14 quoted lines
> 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· Jul 19, 2013, 15:42 UTC · re: Junio C Hamano · lore

Re: [RFC] Delete current branch

Junio C Hamano wrote:
Show 5 quoted lines
> 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· Jul 19, 2013, 16:48 UTC · re: Ramkumar Ramachandra · lore

Re: [RFC] Delete current branch

Ramkumar Ramachandra <artagnon@gmail.com> writes:
Show 9 quoted lines
> 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.

Taylor Hedberg· Jul 19, 2013, 17:08 UTC · re: Junio C Hamano · lore

Re: [RFC] Delete current branch

Junio C Hamano, Fri 2013-07-19 @ 09:48:06-0700:
Show 5 quoted lines
> 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· Jul 19, 2013, 19:15 UTC · re: Taylor Hedberg · lore

Re: [RFC] Delete current branch

Taylor Hedberg <tmhedberg@gmail.com> writes:
Show 8 quoted lines
> 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· Jul 19, 2013, 22:52 UTC · re: Junio C Hamano · lore

Re: [RFC] Delete current branch

Junio C Hamano <gitster@pobox.com> writes:
Show 26 quoted lines
> 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}.

← back to recent threads