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.
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
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
Let’s start with the recipe to create your own project.
- Create a new directory to contain the project.
- Go into the new directory.
- Check the content of the .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.
git addto add the files
git add README.md
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.
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
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.
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.
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
git 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 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
In this part of the tutorial, we will explore different real scenarios using the command
$ 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.
$ 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.
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)
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 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.