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?
"To check out" means that you take any given commit from the repository and re-create the state of the associated file and directory tree in the working directory.
In Git, "checking out" means making a certain state your current working state: the actual files in your Working Copy will be the ones from that exact point in time. In this short article, we'll discuss how you can checkout branches and specific revisions in Git.
NAME git-checkout - Checkout a branch or paths to the working tree [...] DESCRIPTION Updates files in the working tree to match the version in the index or the specified tree. If no paths are given, git checkout will also update HEAD to set the specified branch as the current branch.
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
.
Let me explain some use cases of checkout with file, folder and branches so that it might be helpful in understanding.
Let say we have folder named dev
and index.html
also Everything is tracked and working directory is clean.
If I accidentally change file name index.html
and I want to undo that i will simply use git checkout index.html
it will recover that file state from repository currently selected branch.
Now if I made some change in dev
folder and want to recover that. I can use git checkout dev
but what if there is already branch named dev
instead of checking out that folder it will pull down that branch. To avoid that I would rather do git checkout -- dev
.
Now here bare double dash stands for current branch and asking git for folder dev
from currently selected branch.
Similarly If I do git checkout alpha dev
it will pull down dev folder from alpha branch.
This answer is for your first question 'git checkout really mean'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With