Git, Gitter, Gittest! - A Beginner's Guide to Git - Part II - Branching & Merging

Search for a command to run...

Seemed complex, thanks to you now I feel like it's so much simpler! Very well put, looking forward for more such content🙌
Developers often tell me that the requirements they receive are usually vague and unclear. Another common complaint is that the requirements change midway, causing them to get stuck. Additionally, sometimes the deadline is set before the requirements...

Imagine you've got a REST API for listing users, and each user's information shows up in 12 fields. GET /v1/users/?page=1&page_size=15 { "pagination_data": { "total_records": 10000, "pages": 667, "prev_page_no": null, ...

Decoupling the Data Layer for Enhanced Code Modularity

Essentials for Safeguarding and Maintaining Your Sprint Cycles

A Step-by-Step Tutorial with Practical Examples

In part 1, I gave a very brief introduction to git, then we created a simple project and pushed it to GitHub. If you haven't read part 1, check it out here, Git, Gitter, Gittest! - A Beginner's Guide to Git - Part I.
In this part, we will cover,
In the previous part, we had made just 1 commit. We can see our commits using the git log --oneline command.

Illustrating our commit history below.

Let's make a change in the home.html file and run the git status command.


Git has noticed that we have made a modification in our home.html and is prompting us to add and commit.
So, we run git add home.html so that home.html is staged for the next commit.

Once we commit, git displays the branch master, the new commit ID b35d727, and the message/ description we mentioned while committing.

In the logs, the local master is pointing to the latest commit and in our GitHub repository (which is our remote repository) it is pointing to the first commit.

Let's add one more commit.
We will add some more changes in both our files home.html and about.html.


Again, let's add and commit the changes. We have our new commit 22ca7ec.

In the logs, we see the local master is pointing to the latest commit 22ca7ec, and the remote master is still pointing to the first commit 6198afd.
Our local master and remote master is not in sync, which means the 2 new commits are not in our GitHub repository.


So, we push the code!

Now the logs show us that the local master and the remote master are pointing to the latest commit 22ca73c.


All the commits are being displayed on the GitHub repository's commits page as well.

This is how we add and push new changes to our existing branch!
"Why do we need a new branch?"
You are working on your main branch and a new feature implementation was assigned to you.
This is where you can create a branch for this feature implementation so that you can work on this feature in isolation and whenever you feel the work is done, this branch can be merged to your main branch.
While working on your new feature branch, you may have to switch and fix or add something to your main branch. Branching helps a lot in such situations. If the new feature was being implemented on the main branch, the incomplete code would have been pushed to the main branch.
Let's create a new branch awesome-new-feature using the git branch <branch-name> command. This command will create a new branch named awesome-new-feature from our master branch (since we are currently on the master branch).
Note that this command will create a new branch but NOT SWITCH to this newly created branch.
To switch, we can use the git checkout <branch-name> command.

We are now in our new branch awesome-new-feature!

Also in the logs, awesome-new-feature and the master are pointing to the same latest commit.

On this new branch, we make some modifications in the home.html file and add a new contact-us.html file.

The git status command shows us that we are on the awesome-new-feature branch and we need to add and commit our code.

After committing, the logs show us that the awesome-new-feature is pointing to the latest commit 626ec2f and the master is still pointing to the second last commit 22ca7ec.

Let's create some more modifications in the contact-us.html file and create a new commit.


After committing, the logs show us that the awesome-new-feature is 2 commits ahead of the master branch.

Let's say that our awesome-new-feature is completed and we decide to move this code to our master branch.
That means we have to MERGE our awesome-new-feature to master.
To merge, we need to switch to the branch where the code has to be merged. In our case, that branch is master.
After switching, run the git merge <branch-name> command to merge the branch specified awesome-new-feature to the current branch master.

The local master and the local awesome-new-feature is pointing to the same latest commit after the merging.


If we want, we can also delete the awesome-new-feature branch since it is merged. The git branch -D <branch-name> deletes the branch specified.

After deleting, our commit history looks like this.
The local master is 2 commits ahead of the remote master i.e. the 2 new commits that we created locally are not on our GitHub repository.

Once we push our code to the master branch, the local master and the remote master will be in sync.

And our new commit history!

So, to recap, we
Let's create a new branch other-feature for a new feature that we are building.

We make some changes and add a commit to this branch other-feature.


Let's say, we have to make changes in our master branch. So, we switch to the master branch.

After the updates are added, we create a new commit in the master branch.

The commit history looks like this. The master branch has moved forward.

When we merge other-feature to the master branch, git creates a merge commit. Git will automatically try to merge separate branches and create a new commit which is called the merge commit.

In the logs, f3d7991 is the merge commit added by git with a commit message Merge branch 'other-feature'.


We can delete the other-feature branch after merging.

Now we push to the master branch!

This is how the commit history looks like now on the master. There are no signs of any previous branches that we created.

I hope this was simple and easy to understand. Branching will help you manage your code in a much better way.
Thanks for reading!