All Articles

Learn about Git Core Concepts


What is git?

Git is a version control system and a VCS enables us to record changes over time.

What is git commit graph?

Git commit graph a list of snapshots/commits that has taken by user over time. User can always go back to specific commit and check it out.

Usually we make a commit when a logic of unit is done.

Git three conceptual areas?

  • Working Area

    It is what we see on our file system. We add, delete, and edit files in working tree. Here we have full control on it.

  • Staging Area or Index:

    It is area where user can add files or dirs from working area to the staging area and commit those files that is in the staging area. With this user has freedom to commit specific files and dirs he wants.

  • History

    It is equivalent to git commit graph, where we see list of commits that has made by the user over time. This history is kept in the hidden directory .git and if you share this .gt dir with other user, he’ll have full control over repository with all the versions of it.

Install Git

Before your start using git, you have to make it available on your system.

  • MAC OS:

    $ brew install git

    If you don’t have brew install on your system, follow this install Homebrew.

  • Ubuntu:

    $ sudo apt-get update
    $ sudo apt-get install git

Verify the installation was successful by typing git --version:

$ git --version
git version 2.9.2

Configure Git username and email (Administrator task)

Whenever a user make a commit it adds username, email, and timestamp to the commit by this, other users can see git who has the made the commit and when.

Now the username and email will be used by every repos user has it on its system. The user shouldn’t have to do it again. If you happen to needed a different name for specific repo and all you need to do it add local tag.

Global config:

$ git config --global "mountainfirefly"
$ git config --global ""

For local repo config, use:

$ git config "mountainfirefly"
$ git config ""

We have made git available to our system, now will see how we can use it. For that, let’s create a dir inside your system.

mkdir git-testing
cd git-testing

git init command

We will use git init command to create an empty git repository for our git-testing project. you can do it by running git init command under git-testing dir.

$ git init
Initialized existing Git repository in /${PATH}/git-testing/.git/

Executing git init will creates a .git subdirectory under your current working directory, which contains all the necesarry meta-data for new repository.

git status command

It tells us how things stands in our working tree and in the staging area.

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

In our current case we don’t have anything in working tree and staging area.

git add command

It is used to add files from the working tree to the staging area. Let create a new file to see how does this git add command works.

To create a file and put a same text executes these commands:

$ touch test.txt
$ echo Hello World

Now if you execute git status command git will display a different output.

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)


nothing added to commit but untracked files present (use "git add" to track)

Right now the git is showing our file under untracked file because we haven’t added it to the staging area. To track down this file all you need to do it execute git add command.

git add test.txt

By executing this command, git will add our test.txt file to the staging area. Let’s run git status command to see it.

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   test.txt

So this is our staging area, where it is test.txt file and it is also showing command to unstage this file. Git is really being helpful here.

To commit our changes we will use git commit command.

git commit command

Git commit command create the commit with whatever is in the staging area.

For use it is just test.txt file

$ git commit -m "Add file test.txt"
[master (root-commit) ab49f67] Add file test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

Above you can see we have used the -m option, this is for short message and which is used to described what have being changed.

Now we have first commit in our project and you can change the text of test.txt file and it will again display under the staging area.

$ echo Hello to the world >> test.txt
$ cat test.txt
Hello World
Hello to the world

Run git status to see the difference.

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

Here, again it is displaying in the staging area because we have made the change under test.txt file. Now this file is getting tracked.

To add and commit execute these commands.

$ git add test.txt
$ git commit -m "update test.txt file"
[master 358a518] update test.txt file
 1 file changed, 1 insertion(+)

In the output it is showing one file has changes and once insertion has happened.

This is all for this article, in the next article we will learn how to add remote origin to our local git repository and push the local changes to the remote repository.

I hope you must have enjoyed this article. I write articles like this every week, you can check those out here