git branch
Let's take that sandwich metaphor literally to explore the concept of branches.
Sandwich Prep
Create a sandwich.txt
with the following text:
*bread*
*meat*
*cheese*
*veggies*
*bread*
You can use touch
to create the file, and your editor to edit it.
$ touch sandwich.txt
Then git add
and git commit
it.
$ git add sandwich.txt
$ git commit -m "starting my sandwich"
git branch
will show the list of all our branches and which branch we are currently on, designated by a *
.
Let's check which branch we are on right now.
$ git branch
We only have one branch, the default master
. It has the *
as well.
Ham Sandwich
git branch <new_branch_name>
will create a new branch, using your current branch as a starting point.
We have an idea for a ham sandwich, but we aren't sure its what we want. So, lets create a ham
branch to try it out.
$ git branch ham
$ git branch
We have two branches listed, but we are still on master
(designated by the *
and green text). Let's switch to the ham
branch.
git checkout <branch_name>
checkouts the specified branch, allowing you to make changes.
$ git checkout ham
$ git branch
We can see that now the *
is on ham
.
And if we look at the log, we'll see that ham
has all our previous commits from master
. There is also a pointer to our branch, along with master.
$ git log --decorate
I like ham as my meat. And I also like onions. Let's edit the file like this to reflect that.
*bread*
*meat*
ham
*cheese*
*veggies*
onions
*bread*
Then git add
and git commit
.
$ git add sandwich.txt
$ git commit -m "i want ham"
Now if I look at the git log
, my ham
branch pointer has moved to my most recent commit. That commit, is not on master
, so the pointer to master
is still on the commit below.
$ git log --decorate