tags:

views:

42

answers:

3

In the git documentation for the checkout command the following text is found:

...If no paths are given, git checkout will also update HEAD to set the specified branch as the current branch....

Can anyone give a simpler explanation of what this means? I'm sorry if it seems simple, and reading through that page, I can't seem to come up with what it means exactly. Sorry if this seems basic..

In particular I am confused on how checkout is updating HEAD. I usually envision checkout affecting the working directory -- is this an ability unique to git in that you are updating your local copy of the repository for the purposes of working with it later?

+1  A: 

If you are in a DETACHED HEAD mode (see this question), you could easily reset HEAD to the master branch:

dd

Here a 'git checkout' would reset HEAD to the tip of master branch.
(More in "A Visual Git Reference")
It will also update both the index and the working directory.
So it is not just about resetting the pointer 'HEAD'.

VonC
+1  A: 

HEAD is a pointer to the commit your working copy was checked out from. so if you checkout a branch (or commit or tag) then HEAD is set to that commit.

this information is stored in the textfile .git/HEAD, you can simply look at its content:

$ cat .git/HEAD
# refs: refs/heads/master
knittl
+1  A: 

It means that git checkout branchname will

  1. Check out the files from the tip of that branch into your working directory, and
  2. Set your HEAD to the tip of that branch, so that you are now "on" it.

Example:

 jb@apto % git branch         
 * develop
   master
   next
 jb@apto % git checkout master
 Switched to branch 'master'
 jb@apto % git branch
   develop
 * master
   next
calmh