This is a seven-part series which serves as a guide for understanding the fundamentals surrounding the Git distributed version control system. Curious about how Git works? The second post in the series gives a good understanding of the basic commands used in Git. You can read Part One here.

In this part, we will take an in-depth look at how the basics commands of Git work. In this story, we will have a nice journey through git config, git init, git add, git commit, git clone, git remote, git push and git status. If you have a couple of minutes of your expensive time and you want to improve yourself take a seat and start reading and practicing with us, my dear friend.

If you want to make free money and have a blog like this one using our platform then sign up with this referral link of digital ocean platform if you don’t like money forget it, my friend.

But before jump into the commands of Git, here we have a little image of how to install Git on Ubuntu 18.04.

How to install Git.

Git config

Now that you have Git on your system, you’ll want to do a few things to customize your Git environment. You should have to do these things only once on any given computer; they’ll stick around between upgrades. You can also change them at any time by running through the commands again.

Who you are?

The first thing to do is to tell Git who you are, to introduce yourself, to know each other, because it’s a long journey, it’s measured in friends, not in miles.

$ git config --global user.name "nawter"
$ git config --global user.email 4772025+Nawter@users.noreply.github.com

What is your editor?

Now that Git knows who you are, you can configure the default text editor that will be used when Git needs you to type in a message. If not configured, Git uses your system’s default editor. If you want to use a different text editor, such as Vim, you can do the following:

$ git config --global core.editor vim

Be careful with this step, if you don’t set up your editor like this, you get into a really confusing state when Git attempts to launch it. An example on a Windows system may include a prematurely terminated Git operation during a Git initiated edit.

What are your settings?

If you are not sure about your configuration settings, you can use git config --list a command to list all the settings Git can find at that point:

$git config --list user.name=nawter user.email=4772025+Nawter@users.noreply.github.com credential.helper=cache --timeout=3600 http.postbuffer=1757286400 core.editor=vim

Git init

So we hit this section and your first thoughts are what is my next move, I tell you that should be git init. You’re writing a bit of code to create the new videogame that will change the world, or you’re playing around with some new data to cure cancer and you think git init.

Let’s start with the recipe to create your own project.

  • Create a new directory to contain the project.
Use of mkdir.
  • Go into the new directory.
  • Type git init.
git init sample
  • Check the content of the .git folder
The content of .git folder
  • Write something, for example, a README.md file, either as plain text or with Markdown content, talking about your project, and this is free a template to do it.
  • Type git add to add the files git add README.md
  • Type git commit -m “my first commit”

Let’s check some data before we move to the next section first if we type git log we can see this information which indicates that head position and our last commit.

commit 7182a646f28f83767810ee751d50b9808bd62bf7 (HEAD -> master)
Author: nawter <4772025+Nawter@users.noreply.github.com>
Date: Sun Apr 14 12:46:05 2019 +0100
my first commit

and last but not least if we run again tree .gitand inspect the result ourselves we see that there are some changes in the number of directories and files, it changed from 9 directories and 15 files to 15 directories and 23 files.

The .git folder after changes.

Git remote & Git push

What is a remote repository?

A remote URL is Git’s fancy way of saying the place where your code is stored. That URL could be your repository on Github, or another user’s fork, or even on a completely different server. Git associates a remote URL with a name, and your default remote is usually called origin .

Remote repositories can be on your local machine. It is entirely possible that you can be working with a remote repository that is, in fact, on the same host you are. The word remote does not necessarily imply that the repository is somewhere else on the network or Internet, only that it is elsewhere. Working with such a remote repository would still involve all the standard pushing, pulling and fetching operations as with any other remote.

How to connect to your remote repository?

You’ve now got a local Git repository. You can use Git locally, like that, if you want. But if you want the thing to have a home on Github, do the following.

  • Go to Github website.
  • Log in to your account.
  • Click the new repository button in the top-right. You’ll have an option there to initialize the repository with a README.md file.
  • Click the Create repository button.
Connecting to our remote repository.

Now, follow the second set of instructions, in which you can see …or push an existing repository from the command line.

$ git remote add origin https://github.com/Nawter/LearningGit.git
$ git push -u origin master

And this is the result after we push our changes to the new repository in our terminal.

Counting objects: 3, done.
Writing objects: 100% (3/3), 227 bytes | 227.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Nawter/LearningGit.git
 * [new branch] master -> master
Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’.

And the result in our web browser.

Result in the Github site.

What you can see inside a remote?

If you want to see more information about a particular remote, you can use them git remote show <remote> command. If you run this command with a particular short-name, such as origin, you get something like this:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/Nawter/LearningGit.git
  Push  URL: https://github.com/Nawter/LearningGit.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up-to-date)

Git clone vs Git init

The commandsgit init and git clone can be easily confused. At a high level, they can both be used to initialize a new git repository. However, git clone is dependent on git init. git clone is used to create a copy of an existing repository. Internally, git clone first calls git init to create a new repository then calls git remote add after that, it then fetches all branches from that URL to your local repository using git fetchand finally checks out a new set of working files with git checkout.

Git status

In this part of the tutorial, we will explore different real scenarios using the command git status

Wrong place

$ git status
fatal: not a git repository (or any of the parent directories): .git

If we get this error, we are not in a directory that has a Git repository. Use cd command in our terminal or refer to the Git setup docs regarding setting up your initial repo.

Everything clean

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

This is the ideal Git status message. Being up-to-date with ‘origin/master’. means there is nothing to push. working directory clean means all the files in the current directory are being managed by Git and the most recent version of the file has been committed.

Untracked files

If git statusmentions Untracked files, we may need to add one or more untracked files.

$ git status
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)

In this case, we probably want to add README.md. A good rule is that if we edit the file directly with our editor, the file belongs in it.

To commit or not to commit

If you see the message Changes to be committed: …, it means we have previously run git add, but we have not run git commit

$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
new file:   README.md

Fix this by running git commit with a short message saying what we changed in the files.

$ git commit -m "my first commit" 

[master (root-commit) 7182a64]

my first commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md

After the fixing of the commit.

$ git status
On branch master
nothing to commit, working tree clean

Thanks for reading. If you loved this article, feel free to hit that subscribe button so we can stay in touch.