10 First Git Commands You Need to Know

10 First Git Commands You Need to Know

There are few technologies in IT that achieve such dominance that they become virtually unrivaled. Git is one of them. It plays an essential role in software development, so much so that it has rendered nearly all alternatives obsolete (RIP SVN, and Mercurial). Today, we can hardly imagine software development without Git.

Mastering Git is one of the first skills every software developer should acquire. Although it might seem complex at first, once you get a handle on the basics, it becomes a powerful and intuitive tool for version control. In this post, we’ll cover 10 essential Git commands that will help you take control of your code and workflow, moving you one step closer to Git mastery.


Before we start, I want to invite you to visit 0dev, an open-source data platform that works with natural language. Use 0dev to access your data without complex SQL queries, visualize it without any coding and generate insights without any data science experience.
Repository: https://github.com/0dev-hq/0dev


I assume you have git installed on your machine. If you're not sure about it, simply run this command in your terminal or shell:

git -v

If you see a version it shows you're ready to use it, otherwise you need to install git or fix your installation.

Commands

Now let's start looking at the 10 first git commands you need to learn. These are the commands you use most of the times and also are the foundation of anything else you do with git.

1. git init

The git init command initializes a new Git repository, meaning it sets up everything Git needs to start tracking your project. When you run this command, Git creates a hidden .git directory in your project. This directory is where Git stores all the tracking data, including information about the project’s history, branches, and configuration.

Example

$ mkdir my_project
$ cd my_project
$ git init

After running this command, your project is now under Git version control.


2. git clone

Unlike git init, which creates a new, empty repository, git clone is used to copy an existing repository from a remote server to your local machine. This command is commonly used to pull down repositories from hosting services like GitHub, GitLab, and others, allowing you to have a complete copy of the project, including all of its history, branches, and files.

Example

$ git clone https://github.com/0dev-hq/0dev

This command creates a folder named 0dev in your current directory and copies all the content into it.


3. git add

When you make changes to your codebase, whether adding new files or updating existing ones, you’ll need to tell Git which changes to track. The git add command stages these changes, preparing them for a commit. This step is crucial, as Git requires you to specify exactly which modifications you want to include in the next commit. Staging with git add allows you to control what gets recorded in the project’s history, enabling you to group related changes together for a cleaner, more organized commit history.

Example

$ git add index.html

To stage all changes, use:

$ git add .

4. git commit

After staging files with git add (meaning you've selected specific changes to track), use git commit to save them in the repository’s history. Each commit records a snapshot of your files at that point in time, preserving the exact state of your project.

Remember that after you run git commit, these changes are only saved locally. They won’t be shared with others or saved to a remote repository until you use git push to upload them. This two-step process ensures that you have control over when your changes are finalized locally and when they’re shared remotely.

Example

$ git commit -m "Add index.html with initial content"

The -m flag allows you to add a message describing the changes. Make your messages clear and descriptive to keep your history meaningful.


5. git push

As we saw in git commit your changes won’t be reflected in the remote repository, hence to anyone else using that repository until you push your local changes to the remote origin.

git push is the command that sends your committed changes to a remote repository, making them available for others.

Example

To push your changes:

$ git push origin main

Replace main with the branch name as necessary.
Notes:

  • Typically, you don’t push your changes directly to the main branch. Instead, you create a separate branch to work on features or fixes. This approach keeps the main branch stable and avoids disrupting other collaborators.

  • If you’ve created a new branch and are pushing it for the first time, you’ll need to specify the branch name with the following command:

      $ git push -u origin your-branch-name
    

    The -u flag sets the upstream branch, so future pushes can be done simply with git push, without specifying the branch name.


6. git branch

As we just saw, it’s usually best not to push changes directly to the main or default branch, typically called main. Git allows you to isolate your work from others—or even from your own other work on the repository—by using branches. You can think of a branch as a parallel line of development where you can make changes without affecting the main project. Each branch represents a separate version of the repository, enabling you to work on features or bug fixes independently.

The git branch command is used to create, list, or delete branches. This command is essential for managing different lines of development in a project and keeping your work organized.

Example

To create a new branch:

$ git branch feature-branch

7. git checkout

The git checkout command allows you to switch between branches or restore files to a previous state. It’s frequently used in a multi-branch workflow, letting you work on different features or bug fixes simultaneously without interfering with each other.

Example

To switch to an existing branch named feature-branch:

$ git checkout feature-branch

The git checkout command has multiple options. For example, if you want to create a new branch and switch to it immediately, you can use the -b flag:

$ git checkout -b new-branch-name

This command creates new-branch-name and checks it out in a single step, making it convenient to start work on a fresh branch.


8. git pull

We saw how you can push your changes to a remote repository, but in a collaborative project, you’re usually not the only one working on the code. Sometimes, even you might have worked on a different machine, creating updates that aren’t on your current device.

The git pull command is used to fetch and integrate updates from a remote repository into your local branch. This command combines two actions: it retrieves the latest changes (using git fetch) and merges them into your current branch (using git merge). Regularly pulling changes keeps your local work up-to-date with the remote repository, ensuring you’re working with the latest code.

Example

To pull changes from the main branch on a remote repository (usually origin):

$ git pull origin main

This command fetches the latest updates from the remote main branch and merges them into your current branch. If there are any conflicting changes, Git will prompt you to resolve them before the merge can be completed.


9. git merge and git fetch

The git merge command is used to combine changes from one branch into another, making it essential when you’re ready to bring new features or updates into the main branch. This command integrates changes from the specified branch into your current branch, preserving the history of both branches.

Meanwhile, git fetch allows you to retrieve updates from a remote repository without merging them into your branch right away. This is useful if you want to review changes first before merging, as it brings down updates to your local repository without altering your current branch.

Example: Merging Branches

To merge a feature branch into main, first switch to the branch you want to merge into:

$ git checkout main

Then, merge the changes from feature-branch:

$ git merge feature-branch

If there are conflicting changes between main and feature-branch, Git will prompt you to resolve them before completing the merge. Once you’ve resolved conflicts and saved the files, complete the merge with:

$ git commit

Example: Fetching Changes

To fetch updates from the remote repository without merging:

$ git fetch origin

After running git fetch, you’ll have the latest updates from the remote repository in your local copy, and you can then decide to merge specific branches or review the changes first.


10. git status and git log

Often, you’ll find yourself needing to check the current state of your branch or review the history of your commits. Git provides two essential commands for this purpose: git status and git log.

The git status command gives you an overview of the current state of your working directory and staging area. It shows which files have been modified, added, or removed, and whether these changes are staged or unstaged. This command is essential for checking the status of your changes before committing them, helping you keep track of which modifications will be included in the next commit (staged) and also if there are any untracked files that Git has not yet started tracking (unstaged).

Example: Checking Status

$ git status

The git log command displays the commit history, giving you a detailed view of each commit’s unique ID, author, date, and message. This command allows you to review the sequence of changes made to the project, making it easier to track the history and understand who made which updates.

Example: Viewing Log History

$ git log

To simplify the log view, you can use git log --oneline, which condenses each commit into a single line with just the commit ID and message, providing a more streamlined overview of the commit history.


These commands form the foundation of Git and are essential for managing your project’s history and collaborating effectively. Mastering these basics will give you confidence in version control, setting the stage for more advanced techniques.

In the next posts of this series, we’ll dive into some intermediate and advanced Git commands, exploring ways to streamline workflows, manage conflicts, and optimize collaboration even further.