Subject: Re: unable to checkout branches and proper procedure for creating a new branch based off of another one

From: Gabriel Filion <[email-masked]>
Date: Thu, 17 Jun 2010 01:04:26 -0400

Hello,

On 2010-06-16 23:44, Thomas Anderson wrote:
> Also, directories that are present in the "branch" branch aren't
> present in the current working directory, despite my having switched
> over.  "git checkout origin/branch" adds the missing directories but
> "git checkout -b origin/branch" does not.  Which leaves me wondering
> what the latter is doing.
> 

Here's for a really short difference between both commands:

git checkout origin/branch
^-> tells git to change the working tree to look like the commit that is
pointed to by the remote branch named "branch" on the remote named "origin".
"origin" is automatically created by "git clone" and represents the
repository from which you cloned the code.

git checkout -b origin/branch
^-> this tells git to create a branch named "origin/master" from the
point in the history on which you currently are and then to switch to it
(checkout). In fact, your working tree will not be different as the
branch was started where you were, e.g. on the "default" branch. The
difference will be that commits made from now on will be placed on the
branch named "origin/branch".

The "branch" branch is there, but it is only referenced by the remote
"origin". I believe what you want to do is to execute the following command:

git branch branch origin/branch
^-> This one creates a local branch named "branch" that tracks the
"origin/branch" remote branch. It will not switch to it, though. You
need to do "git checkout branch" afterwards to have your worktree
adjusted. By doing the above command you effectively tell git that you'd
like to work on the top of the point "origin/branch". Your commits will
be local until they are pushed to origin, hence the need to have a local
branch that can possibly point to a different place in history.

Hope that was not too confusing :\ don't hesitate to ask for precisions ;)

> On Wed, Jun 16, 2010 at 10:32 PM, Thomas Anderson <[email-masked]> wrote:
>> I guess what I was trying to do was checkout a remote branch.  Of
>> course, it's unclear to me what the difference between "git checkout
>> origin/branch" and "git checkout -b origin/branch" is.  The latter
>> creates a local branch and the former doesn't?  Does that mean that,
>> with the former, changes I commit and subsequently push will get
>> written to the remote default branch and not the remote "branch"
>> branch?
>>
>> And how do I check that files in the current working directory are
>> from the desired branch?  "git log" shows commits made to the default
>> branch - not to the "default" branch, which doesn't give me much
>> confidence...
>>
>> On Wed, Jun 16, 2010 at 9:41 PM, Thomas Anderson <[email-masked]> wrote:
>>> Say there's a Git repository with two branches: default (which is the
>>> default branch) and branch.  I want to checkout branch and start
>>> working on that but am unsure of how to do it.  Here are the commands
>>> that I did:
>>>
>>> git clone [email-masked]:username/repo.git
>>> cd repo
>>> git checkout branch
>>>
>>> But that gets me the following error:
>>>
>>> fatal: Not a git repository (or any of the parent directories): .git
>>>
>>> I do "git branch" and here's what I see:
>>>
>>> * default
>>>
>>> Where's "branch"?
>>>
>>> And let's say I wanted to create my own branch based on "branch".
>>> Let's say "branch-zelnaga".  How would I do that?  Do I just checkout
>>> that branch, create a new branch while the current working directory
>>> contains files from the desired branch and then push / commit as
>>> appropriate?
>>>
>>

-- 
Gabriel Filion