threads / discuss / 17142

How to pull remote branch with specified commit id?

Subject: How to pull remote branch with specified commit id?

## tl;dr

8 messages between Jan 13, 2009 and Jan 14, 2009.

replies: 7people: 5as markdown or json

Emily Ren· Jan 13, 2009, 09:08 UTC · lore
Git experts,
I want to pull remote branch with specified commit id, how to do it?

Below command can get remote branch $git pull remote refs/heads/$branch_name

Below command doesn't work $git pull remote objects/$commit_id

Thanks, Emily

Andreas Ericsson· Jan 13, 2009, 09:16 UTC · re: Emily Ren · lore

Re: How to pull remote branch with specified commit id?

Emily Ren wrote:
Show 10 quoted lines
> Git experts,
> 
> I want to pull remote branch with specified commit id, how to do it?
> 
> Below command can get remote branch
> $git pull remote refs/heads/$branch_name
> 
> Below command doesn't work
> $git pull remote objects/$commit_id
> 

You need to fetch it first, and then merge the commit you want. The tools operating the fetching protocol only use refs, so if you want to fetch (or pull) a specific version that has neither a tag nor a branch head pointing to it, you'll have to write a new tool for that.

The end-result of the following command will be, barring side-effects in the remote-tracking branches, identical to what you're trying to do though: git fetch remote && git merge $commit_id

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231
Emily Ren· Jan 13, 2009, 13:15 UTC · re: Andreas Ericsson · lore

Re: How to pull remote branch with specified commit id?

Andreas,
I tried your method, it works. Thank you very much !
Emily
On Tue, Jan 13, 2009 at 5:16 PM, Andreas Ericsson <ae@op5.se> wrote:
Show 28 quoted lines
> Emily Ren wrote:
>>
>> Git experts,
>>
>> I want to pull remote branch with specified commit id, how to do it?
>>
>> Below command can get remote branch
>> $git pull remote refs/heads/$branch_name
>>
>> Below command doesn't work
>> $git pull remote objects/$commit_id
>>
>
> You need to fetch it first, and then merge the commit you want. The
> tools operating the fetching protocol only use refs, so if you want
> to fetch (or pull) a specific version that has neither a tag nor a
> branch head pointing to it, you'll have to write a new tool for that.
>
> The end-result of the following command will be, barring side-effects
> in the remote-tracking branches, identical to what you're trying to
> do though:
> git fetch remote && git merge $commit_id
>
> --
> Andreas Ericsson                   andreas.ericsson@op5.se
> OP5 AB                             www.op5.se
> Tel: +46 8-230225                  Fax: +46 8-230231
>
Johannes Sixt· Jan 13, 2009, 09:43 UTC · re: Emily Ren · lore

Re: How to pull remote branch with specified commit id?

Emily Ren schrieb:
Show 9 quoted lines
> Git experts,
> 
> I want to pull remote branch with specified commit id, how to do it?
> 
> Below command can get remote branch
> $git pull remote refs/heads/$branch_name
> 
> Below command doesn't work
> $git pull remote objects/$commit_id
You can't, and that is so by design.

Consider this: You accidentally push a branch with confidential data to a public repository. You notice it early, and quickly delete the branch using 'git push the-repo :refs/heads/that-branch'. At this time the objects with the confidential data are still lingering in the public repository. But with the current behavior noone can access them even if the SHA1 happens to be known.

-- Hannes
Brad King· Jan 13, 2009, 21:57 UTC · re: Johannes Sixt · lore

Re: How to pull remote branch with specified commit id?

Johannes Sixt wrote:
Show 6 quoted lines
> Consider this: You accidentally push a branch with confidential data to a
> public repository. You notice it early, and quickly delete the branch
> using 'git push the-repo :refs/heads/that-branch'. At this time the
> objects with the confidential data are still lingering in the public
> repository. But with the current behavior noone can access them even if
> the SHA1 happens to be known.

Might a repack (perhaps an automatic one) put the object in a pack (perhaps in a delta chain) that can be fetched through another ref?

-Brad
thestar@fussycoder.id.au· Jan 14, 2009, 05:54 UTC · re: Brad King · lore

Re: How to pull remote branch with specified commit id?

Show 7 quoted lines
> Johannes Sixt wrote:
>> Consider this: You accidentally push a branch with confidential data to a
>> public repository. You notice it early, and quickly delete the branch
>> using 'git push the-repo :refs/heads/that-branch'. At this time the
>> objects with the confidential data are still lingering in the public
>> repository. But with the current behavior noone can access them even if
>> the SHA1 happens to be known.
Doesn't this line of reasoning only apply to the ssh and git transports?
  (ie, the file and rsync transport would retrieve it regardless)
Johannes Sixt· Jan 14, 2009, 07:02 UTC · re: thestar@fussycoder.id.au · lore

Re: How to pull remote branch with specified commit id?

thestar@fussycoder.id.au schrieb:
Show 11 quoted lines
>> Johannes Sixt wrote:
>>> Consider this: You accidentally push a branch with confidential data
>>> to a
>>> public repository. You notice it early, and quickly delete the branch
>>> using 'git push the-repo :refs/heads/that-branch'. At this time the
>>> objects with the confidential data are still lingering in the public
>>> repository. But with the current behavior noone can access them even if
>>> the SHA1 happens to be known.
> 
> Doesn't this line of reasoning only apply to the ssh and git transports?
>  (ie, the file and rsync transport would retrieve it regardless)
You are right. Http and rsync would happily ship the object.
-- Hannes
Johannes Sixt· Jan 14, 2009, 07:01 UTC · re: Brad King · lore

Re: How to pull remote branch with specified commit id?

Brad King schrieb:
Show 10 quoted lines
> Johannes Sixt wrote:
>> Consider this: You accidentally push a branch with confidential data to a
>> public repository. You notice it early, and quickly delete the branch
>> using 'git push the-repo :refs/heads/that-branch'. At this time the
>> objects with the confidential data are still lingering in the public
>> repository. But with the current behavior noone can access them even if
>> the SHA1 happens to be known.
> 
> Might a repack (perhaps an automatic one) put the object in a pack
> (perhaps in a delta chain) that can be fetched through another ref?
No, assuming that-branch was the only ref that contained the objects.

Even if the repack happens before the branch is deleted, the objects that were *only* in that-branch will not be sent out.

-- Hannes

← back to recent threads