What are checkout
s in git?
I know once you do checkout
to a particular branch, the HEAD
points to that branch. But what does it really mean? Does it mean I can then work on that branch? If yes, then, without checking out a branch, I am not able to work on it?
Also, what does remote checkout
mean? How is it useful?
As you noted, HEAD
is a label noting where you are in the commit tree. It moves with you when you move from one commit to another. git checkout <commit>
is the basic mechanism for moving around in the commit tree, moving your focus (HEAD
) to the specified commit.
The commit can be specified by any of a number of ways, commit hash, branch name, tag name, the relative syntax (HEAD^
, HEAD~1
, etc.) and so on. It is often useful to consider a checkout to be changing branches, and there are some options that work from that perspective, but they all reference commits.
To checkout a commit has some side affects other than moving HEAD
around.
-b
option a new branch will be created based on the current commit and then made active.--track
option the checked out branch can be made aware of a remote branch--orphan
option a new branch is created (like with -b
) but will not be based on any existing commit.There are a few more options, which you can read about in the git checkout man-page, all of which revolve around moving from one commit to another -- just varying in what effect that move has in addition to moving HEAD
.