[dmd-internals] Git question: How do I push a *single* branch?

Don Clugston dclugston at googlemail.com
Mon Nov 21 06:35:55 PST 2011


On 21 November 2011 12:35, Martin Nowak <dawg at dawgfoto.de> wrote:
> On Mon, 21 Nov 2011 11:31:50 +0100, Don Clugston <dclugston at googlemail.com>
> wrote:
>
>> On 21 November 2011 10:12, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
>>>
>>> On Monday, November 21, 2011 10:01:30 Don Clugston wrote:
>>>>
>>>> In my local repository I have two branches, branch1 and branch2.
>>>> I publish branch1 to github:
>>>> git push origin : branch1
>>>> A side-effect of this, is that it automatically makes branch1 a remote
>>>> tracking branch.
>>>>
>>>> Now, I add an extra commit to branch1, but I don't want to push it yet.
>>>> But I do want to push branch2.
>>>> So I type:  git push origin : branch2
>>>> This creates branch2, BUT it also pushes branch1 as well!
>>>> How do I stop this?
>>>>
>>>>  I can't see anything in the manual for git push that explains this.
>>>> How can I push branch2 *only* ?
>>>
>>> I would do
>>>
>>> git-push origin branch1
>>>
>>> That only pushes branch1 regardless of what's going on in other branches.
>>> It
>>> creates the branch in origin if it doesn't exist there and updates it
>>> otherwise. You then _remove_ a branch in origin by doing
>>>
>>> git-push origin :branch1
>>>
>>> So, I'm surprised that
>>>
>>> git-push origin : branch1
>>>
>>> isn't deleting branch1 in origin. I guess that the space makes all the
>>> difference. I'd have to go digging throught Pro Git and the like to know
>>> what
>>>
>>> git-push origin : branch1
>>>
>>> is really doing.
>>
>> Thanks, you're right!
>>
>> Turns out that " : " (with spaces) means "push everything".
>>
> They would have done better to only allow '+:' to push matching branches.
>
>> So:
>> git push origin : branch1  ---> push everything. The "branch1"
>> argument is irrelevant, except that it must exist locally
>
> It says matching, so the need to exist locally and at the remote site.
> I think 'git push origin :' is actually equivalent to 'git push origin'.

Yes. But once there's a ' : ' in the list, it makes no sense for other
branches to be listed. It should be an error.

>> git push origin:branch1    --> (this is an error)
>> git push origin origin:branch1 --> push currently active branch to
>> remote branch1, which must already exist.
>
> This is a little odd but origin implicitly matches refs/remotes/origin/HEAD.
>
>> git push origin :branch1   ---> delete remote branch1
>
> As in pushing an empty sha-1 to a branch.

I've heard that explanation before, but are there any other situations
in git where an empty string is valid as a sha-1?


More information about the dmd-internals mailing list