Git Checkout and Intro to Branches
In this lesson, you’ll learn how to go through git commit history to checkout old commits. You’ll also learn what the terms master, HEAD, and branch mean.
00:01 You’re going to like this. Git has another cool feature. It can travel forward and backwards in time. While we can’t quite go back and see a T-Rex, you can move forwards and backwards in the timeline of your project.
00:14
This is done with a command called checkout
. In this module, you’re going to learn a couple of new and important terms named HEAD
and branch
, so let’s hop into the console and see if you can spot the terms.
00:27
Then we’ll define them. Let’s make one more commit before we start working with git checkout
, and let’s just commit the rest of The Zen of Python to our zen_of_python
file.
00:40
So hop back into your Python console, grab the rest of The Zen of Python—you stopped on line 7, somewhere around here. Just grab the rest of it, copy it, hop back into your repo, open your zen_of_python
file. If you’re using VIM, hit i
for insert, hop down to the next line, and paste everything in.
01:05
Then Escape, Shift, colon (:
), wq
, Enter. And now if you take a look at zen_of_python
, it should be complete. So let’s commit that. Remember how to commit?
01:21
git add zen_of_python
, git commit -m
, and put our imperative message,
01:40
Check git status
, and you’re ready to go. So the first thing you want to do is run git log
, and you can see our three commits that we have in this project so far.
01:52
So let’s move back to this old commit. To do this, you need to use the git checkout
command and specify the checksum of the commit that you want to view. git checkout
,
02:13 and we’ll move to this one, copy it.
02:20 Well, that just blasted you with a bunch of information, huh? That’s the kind of message that makes you sweat a little bit. Let’s small chunk this, so we can kind of digest this message. First, Git verifies that it is checking out the commit.
02:35
Then it tells you you’re in a 'detached HEAD'
state. What does that even mean? And there’s another new term in there called branch
. I wonder what that means.
02:44
And from this message, we see that we can make experimental changes in this quote-unquote 'detached HEAD'
state. And it tells us if we want to retain commits, we’d need to create another branch.
02:58
So let’s get our HEAD
back on and we’ll take a look at a diagram to kind of walk you through what just happened. So, to reattach our HEAD
, we’re going to do git checkout master
.
03:12
Now let’s go check out a diagram. Check this out. You’ve been working in what’s known as a branch the whole time, and it’s called the master
branch. When you initialize your Git repo, it creates the master
branch automatically.
03:28
So, here’s the master
branch with each of these dots representing our three commits. If you wanted to work on a new feature, you might start your own branch.
03:40 Branches are integral to working in Git. They represent independent lines of development. You use branches to diverge or separate different lines of thought.
03:51
Maybe you want to experiment or work on a new feature and you don’t want to affect your master
branch. You can use these branches to do so.
04:00
So, going back to the earlier example from our console, you got a warning that you were in what’s called a 'detached HEAD'
state. HEAD
is just a pointer indicating where you are within your branches and/or commits within the project.
04:16
Typically, the HEAD
sits at the end of whatever branch you have checked out. The first time you ran checkout
, Git moved HEAD
to point at the first commit and it was warning you that you weren’t in the most current area of development for the master
branch.
04:32 So this detached state is good for traversing and viewing the timeline of a project, but we shouldn’t use it for writing new code and features, especially when working on a team. For that, we’ll start using branches, and we’ll discuss them in the next video.
Bartosz Zaczyński RP Team on Dec. 4, 2020
Good point. It’s worth noting, though, that master
is still the default name in git when you create a new repository on your local machine. It’s GitHub that recommends renaming your branch to main
with the following command, which isn’t mandatory:
$ git branch -M main
So you can still work with older repositories or keep the traditional branch names in new ones if you wish.
arthur55 on March 2, 2024
So does this mean that the first time you commit a file the command is git commit -m “Add <file_name>.”, but every subsequent time you commit it, the command is git commit -m “Complete <file_name>.”?
darrel canada on June 18, 2024
I also got supprised by a:
error: pathspec 'master' did not match any file(s) known to git
get checkout main
brought me back to head -> main
Become a Member to join the conversation.
Dennis Smith on Dec. 3, 2020
If anyone caught a snag on
git checkout master
like I did, it’s because it has been replaced withgit checkout main
to avoid referencing slavery. Read more about it here: github.com/github/renaming