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

Martin Nowak dawg at dawgfoto.de
Mon Nov 21 09:15:08 PST 2011


On Mon, 21 Nov 2011 15:35:55 +0100, Don Clugston  
<dclugston at googlemail.com> wrote:

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

Probably not. I didn't wanted to claim that these commands are somewhat  
consistent.
But at least once being learned and justified by arbitrary explanations  
you don't have
to type a lot.

> _______________________________________________
> dmd-internals mailing list
> dmd-internals at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/dmd-internals


More information about the dmd-internals mailing list