threads / discuss / 40468

Convenient shortcut to push delete current branch?

Subject: Convenient shortcut to push delete current branch?

## tl;dr

4 messages between Oct 1, 2015 and Oct 2, 2015.

replies: 3people: 3as markdown or json

Robert Dailey· Oct 1, 2015, 16:43 UTC · lore
For convenient pushing of current branch, git supports this syntax:
$ git push origin HEAD

This will push your current branch up. However, is there such a shortcut for *deleting* the branch? The only goal here is to avoid having to type the branch name in the push command. Normally I rely on tab completion but we have tons of branches, all which start with some prefix mixed with numbers, so it becomes cumbersome to rely on tab completion. Ideally I'd like to be able to do:

$ git push --delete origin HEAD $ git push origin :HEAD

Is there a syntax like this available?
Jacob Keller· Oct 1, 2015, 18:22 UTC · re: Robert Dailey · lore

Re: Convenient shortcut to push delete current branch?

On Thu, Oct 1, 2015 at 9:43 AM, Robert Dailey <rcdailey.lists@gmail.com> wrote:
Show 15 quoted lines
> For convenient pushing of current branch, git supports this syntax:
>
> $ git push origin HEAD
>
> This will push your current branch up. However, is there such a
> shortcut for *deleting* the branch? The only goal here is to avoid
> having to type the branch name in the push command. Normally I rely on
> tab completion but we have tons of branches, all which start with some
> prefix mixed with numbers, so it becomes cumbersome to rely on tab
> completion. Ideally I'd like to be able to do:
>
> $ git push --delete origin HEAD
> $ git push origin :HEAD
>
> Is there a syntax like this available?
You can do
git push origin:<branchname>

but I don't believe HEAD is supported. It might be valuable to extend push to have a --delete option which would maybe be useful for those who didn't learn the full refspec syntax.

I don't think git push origin :HEAD makes too much sense, since that's on the remote side of a refspec, and you want it interpreted locally... I suppose it makes sense somewhat, but other refspecs with HEAD on the remote side of the refspec don't really make sense, where as HEAD always makes sense on the local side of the refspec.

Regards, Jake

Robert Dailey· Oct 1, 2015, 18:37 UTC · re: Jacob Keller · lore

Re: Convenient shortcut to push delete current branch?

On Thu, Oct 1, 2015 at 1:22 PM, Jacob Keller <jacob.keller@gmail.com> wrote:
Show 24 quoted lines
> On Thu, Oct 1, 2015 at 9:43 AM, Robert Dailey <rcdailey.lists@gmail.com> wrote:
>> For convenient pushing of current branch, git supports this syntax:
>>
>> $ git push origin HEAD
>>
>> This will push your current branch up. However, is there such a
>> shortcut for *deleting* the branch? The only goal here is to avoid
>> having to type the branch name in the push command. Normally I rely on
>> tab completion but we have tons of branches, all which start with some
>> prefix mixed with numbers, so it becomes cumbersome to rely on tab
>> completion. Ideally I'd like to be able to do:
>>
>> $ git push --delete origin HEAD
>> $ git push origin :HEAD
>>
>> Is there a syntax like this available?
>
> You can do
>
> git push origin:<branchname>
>
> but I don't believe HEAD is supported. It might be valuable to extend
> push to have a --delete option which would maybe be useful for those
> who didn't learn the full refspec syntax.
Push already has a --delete option.
Show 5 quoted lines
> I don't think git push origin :HEAD makes too much sense, since that's
> on the remote side of a refspec, and you want it interpreted
> locally... I suppose it makes sense somewhat, but other refspecs with
> HEAD on the remote side of the refspec don't really make sense, where
> as HEAD always makes sense on the local side of the refspec.
HEAD makes sense on the remote side if you think of it like an alias:
HEAD -> branch-name -> SHA1

HEAD simply points to branch-name. It makes sense for git to assume that we should never do anything with real HEAD ref on the remote side, and instead treat it as a substitution for the remote name. My assumption may not be correct, but at the very least it should be a niche case.

Mike Rappazzo· Oct 2, 2015, 13:33 UTC · re: Robert Dailey · lore

Re: Convenient shortcut to push delete current branch?

On Thu, Oct 1, 2015 at 2:37 PM, Robert Dailey <rcdailey.lists@gmail.com> wrote:
Show 28 quoted lines
> On Thu, Oct 1, 2015 at 1:22 PM, Jacob Keller <jacob.keller@gmail.com> wrote:
>> On Thu, Oct 1, 2015 at 9:43 AM, Robert Dailey <rcdailey.lists@gmail.com> wrote:
>>> For convenient pushing of current branch, git supports this syntax:
>>>
>>> $ git push origin HEAD
>>>
>>> This will push your current branch up. However, is there such a
>>> shortcut for *deleting* the branch? The only goal here is to avoid
>>> having to type the branch name in the push command. Normally I rely on
>>> tab completion but we have tons of branches, all which start with some
>>> prefix mixed with numbers, so it becomes cumbersome to rely on tab
>>> completion. Ideally I'd like to be able to do:
>>>
>>> $ git push --delete origin HEAD
>>> $ git push origin :HEAD
>>>
>>> Is there a syntax like this available?
>>
>> You can do
>>
>> git push origin:<branchname>
>>
>> but I don't believe HEAD is supported. It might be valuable to extend
>> push to have a --delete option which would maybe be useful for those
>> who didn't learn the full refspec syntax.
>
> Push already has a --delete option.
>

I could see adding an option for --delete-upstream that would use the upstream remote and ref of the current branch (if they exist). External to git you could script this from the config (completely untested):

    if branch=$(git symbolic-ref --short HEAD); then
        if remote=$(git config branch.$branch.remote); then
            if remote_ref=$(git config branch.$branch.merge); then
                git push $remote --delete $remote_ref
            fi
        fi
    fi
Show 19 quoted lines
>> I don't think git push origin :HEAD makes too much sense, since that's
>> on the remote side of a refspec, and you want it interpreted
>> locally... I suppose it makes sense somewhat, but other refspecs with
>> HEAD on the remote side of the refspec don't really make sense, where
>> as HEAD always makes sense on the local side of the refspec.
>
> HEAD makes sense on the remote side if you think of it like an alias:
>
> HEAD -> branch-name -> SHA1
>
> HEAD simply points to branch-name. It makes sense for git to assume
> that we should never do anything with real HEAD ref on the remote
> side, and instead treat it as a substitution for the remote name. My
> assumption may not be correct, but at the very least it should be a
> niche case.
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

← back to recent threads