DEV Community

Akash Kumar
Akash Kumar

Posted on • Originally published at resilientbloke.hashnode.dev on

Mastering Git: A Beginner's Guide

Introduction to Version Control and Git

As a developer, you have probably experienced the frustration of losing code changes, overwriting someone else's work, or not being able to go back to a previous version of your code. Version control systems exist to solve these problems and make it easier for developers to collaborate on code projects.

In a version control system (VCS), every change made to the codebase is recorded and stored, allowing developers to track the history of their code, revert to previous versions, and collaborate with others. There are several VCSs available, and Git is one of the most popular and widely used.

So, what is Git? Git is a distributed version control system that allows developers to track changes to their code, collaborate with others, and manage versions of their codebase. Linus Torvalds created it in 2005 for the development of the Linux kernel, and it has since become the de facto standard for version control in the software industry.

Git stores snapshots of the codebase at different points in time, called "commits." Each commit records the changes made to the codebase since the previous commit, along with a message describing the changes. This allows developers to track the history of their code and go back to earlier versions if needed.

Git also supports branching, which allows developers to create separate copies of their codebase to work on without affecting the main codebase. This is useful for experimenting with new features or fixing bugs without impacting the production code.

In summary, Git is a powerful tool for tracking changes to your code, collaborating with others, and managing versions of your codebase. In the following sections of this dev blog, we will learn how to set up Git, the basic Git commands, and more advanced Git concepts.

Setting up Git

Before we can start using Git, we need to install it on our machine and set up some basic configuration.

Installing Git

Git is available for all major operating systems, including Windows, Mac, and Linux. You can download the latest version of Git from the official website (https://git-scm.com/downloads). The installation process is straightforward and should not take long.

Once the installation is complete, you can verify that Git is installed by opening a terminal (on Mac or Linux) or a command prompt (on Windows) and typing git --version. This should print the version of Git that you have installed.

Configuring your user name and email

Git records the author of each commit, so it is important to configure your user name and email in Git. This can be done using the following commands:

git config --global user.name "Your Name"
git config --global user.email "your@email.com"

Enter fullscreen mode Exit fullscreen mode

These settings will be stored in your global Git configuration file, which is located at ~/.gitconfig on Unix-like systems and C:\Users\YourUsername\.gitconfig on Windows.

That's it! You have now set up Git on your machine and configured your user name and email. In the next section, we will learn the basic Git commands to start using Git.

Git branches

Git branches are an essential feature of Git that allows developers to create separate copies of their codebase to work on without affecting the main codebase. This is useful for experimenting with new features, fixing bugs, or working on a feature without impacting the production code.

When you create a new Git repository, it automatically creates a default branch called master. This is the main branch where you will commit your changes. However, you can create as many additional branches as you need to work on different features or bugs.

Creating a branch

To create a new branch, you can use the git branch command followed by the name of the new branch. For example:

git branch new-feature

Enter fullscreen mode Exit fullscreen mode

This will create a new branch called new-feature based on the current commit. Note that this does not switch to the new branch, it just creates it. To switch to the new branch, you can use the git checkout command followed by the name of the branch. For example:

git checkout new-feature

Enter fullscreen mode Exit fullscreen mode

This will switch to the new-feature branch, and you can start making changes to your code. When you are ready to commit your changes, you can use the usual git commit command. These commits will be added to the new-feature branch and will not affect the master branch.

Switching between branches

You can switch between branches using the git checkout command followed by the name of the branch. For example:

git checkout master

Enter fullscreen mode Exit fullscreen mode

This will switch to the master branch. Any changes you make to the codebase will be applied to the master branch, and they will not affect the new-feature branch.

Merging branches

Once you have finished working on a feature or a bug in a separate branch, you will want to merge these changes back into the main branch. To do this, you can use the git merge command followed by the name of the branch you want to merge. For example:

git checkout master
git merge new-feature

Enter fullscreen mode Exit fullscreen mode

This will merge the new-feature branch into the master branch, bringing in all the changes you made in the new-feature branch.

Resolving merge conflicts

Sometimes, when you try to merge two branches, Git may detect conflicts between the changes made in each branch. For example, if you changed the same line of code in both branches, Git will not know which change to keep. In this case, Git will mark the conflicting files with special markers and will not complete the merge until the conflicts are resolved.

To resolve merge conflicts, you need to open the conflicting files and manually edit them to keep the changes you want and remove the markers. Once you have resolved the conflicts, you can commit the changes to complete the merge.

In summary, Git branches are a powerful tool for working on separate features or bugs without affecting the main codebase. They allow you to experiment and make changes to your code without impacting the production code until you are ready to merge the changes back into the main branch. In the next section, we will learn about Git remotes, which allow you to collaborate with other developers using Git.

Git remotes

Git remotes are remote repositories that are hosted on a remote server and can be accessed over the network. You can use Git remotes to collaborate with other developers, share your code, and synchronize your local repository with the remote repository.

Adding a remote repository

To add a remote repository to your local repository, you can use the git remote command followed by the add subcommand and the name of the remote repository. For example:

git remote add origin https://github.com/user/repo.git

Enter fullscreen mode Exit fullscreen mode

This will add a remote repository named origin with the URL https://github.com/user/repo.git to your local repository. You can choose any name you like for the remote repository, but origin is a commonly used name for the main remote repository.

Cloning a remote repository

You can also create a new local repository by cloning a remote repository using the git clone command followed by the URL of the remote repository. For example:

git clone https://github.com/user/repo.git

Enter fullscreen mode Exit fullscreen mode

This will create a new local repository in the current directory and will automatically add the remote repository as the origin remote.

Pushing and pulling changes

Once you have added a remote repository to your local repository, you can push your local commits to the remote repository using the git push command. For example:

git push origin master

Enter fullscreen mode Exit fullscreen mode

This will push the master branch of your local repository to the origin remote.

You can also pull changes from the remote repository to your local repository using the git pull command. For example:

git pull origin master

Enter fullscreen mode Exit fullscreen mode

This will pull the master branch from the origin remote and merge it into your local master branch.

In summary, Git remotes are a useful tool for collaborating with other developers and sharing your code. They allow you to synchronize your local repository with a remote repository and collaborate with others in real-time. In the next section, we will learn about advanced Git topics such as stashing, rebasing, and cherry-picking.

Advanced Git topics

In this section, we will learn about some advanced Git topics that can help you work more efficiently and effectively with Git.

Stashing changes

Sometimes, you may find yourself working on a feature or a bug and want to switch branches to work on something else, but you don't want to commit your changes yet because they are not ready. In this case, you can use the git stash command to temporarily save your changes and switch branches.

To stash your changes, you can use the git stash command followed by the save option. For example:

git stash save "Work in progress"

Enter fullscreen mode Exit fullscreen mode

This will save your changes to the stash and switch to the previous commit. You can then switch to another branch and work on something else.

To restore your stashed changes, you can use the git stash command followed by the pop option. For example:

git stash pop

Enter fullscreen mode Exit fullscreen mode

This will restore your stashed changes and remove them from the stash.

Rebasing and cherry-picking

Git also offers advanced techniques for modifying the commit history, such as rebasing and cherry-picking.

Rebasing allows you to change the base commit of a branch, effectively moving the branch to a new starting point. This can be useful for cleaning up the commit history and removing unnecessary commits.

Cherry-picking allows you to select specific commits and apply them to a different branch. This can be useful for cherry-picking bug fixes or features from one branch to another.

These advanced techniques can be powerful tools, but they can also be dangerous if not used correctly. It is important to understand the implications of these actions and use them with caution.

In summary, Git offers advanced features such as stashing, rebasing and cherry-picking that can help you work more efficiently and effectively with Git. However, it is important to understand the implications of these actions and use them with caution.

Conclusion and further resources

In this dev blog, we have learned the basics of Git and how to use it to track changes to your code, collaborate with others, and manage versions of your codebase. We have also learned about advanced Git features such as branches, remotes, and stashing, rebasing, and cherry-picking.

There is much more to learn about Git, and the best way to continue learning is to practice using Git on your own projects and seek out further resources. Some good resources for learning more about Git include the official Git documentation (https://git-scm.com/doc), online tutorials and courses, and books on Git.

I hope this dev blog has been helpful in introducing you to the world of Git and giving you the tools to start using it effectively in your projects. Happy coding!

Top comments (0)