Git basics: getting started with Git

Git

Git is a distributed Version Control System that allows developers to manage their code and maintain bigger projects as the number of the developers involved grow. Today let’s take a look at the basics.

Tip!
If you still don’t know what Git is head here.

Installing Git

The first thing to do is get the software on your machine:

  • On Windows: head here to download it. Once you have installed it you will have an application called “Git Bash” that will take you to a shell. You can also use Cygwin, but it’s more complicated.
  • On Mac: head here to download it. Once you have installed, just head to the terminal and you will be able to use git. You can also install it using Brew.
  • On Linux: use your package manager to get it.
    On Debian-based systems:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    # apt install git
    # apt install git
    # apt install git

    On RedHat-based systems (replace yum with dnf if you’re using Fedora>21):

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    # yum install git
    # yum install git
    # yum install git

First-time configuration

This configuration is needed to know “who you are”. Be careful about the choice, this name and email will be present in every commit you make. Open a terminal and do:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git config --global user.name "YOURNAME"
$ git config --global user.email YOUREMAIL@YOURHOSTING.TLD
gitconfigglobaluser.name"YOURNAME" git config --global user.email YOUREMAIL@YOURHOSTING.TLD
$ git config --global user.name "YOURNAME"
$ git config --global user.email YOUREMAIL@YOURHOSTING.TLD

Your first repository

Now that you’re ready: fire up your terminal, create a new directory wherever you want, enter that directory and type:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git init
Initialized empty Git repository in /home/mark/test/.git/
$ git init Initialized empty Git repository in /home/mark/test/.git/
$ git init
Initialized empty Git repository in /home/mark/test/.git/

As you can see you’ve just created your first repository! That is confirmed by the .git directory that has been created. That directory contains the whole project and everything that has been committed to git. On the other hand the directory you’re in is called WORKING DIRECTORY.

Adding files

While being in the working directory, create a new file called “file1” and fill it with whatever you feel like. Now type:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git add file1
$ git add file1
$ git add file1

If you typed everything right, you will get no message. In this way you’ve added file1 to the “changes to be committed”. The file isn’t yet inside the git repository.

Committing

You added the file in the precedent step, now it’s time to commit it. While in the working directory do:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git commit -m "Initial commit"
[master (root-commit) 61ff22c] Initial commit
1 file changed, 1 insertion(+)
create mode 100644 file
$ git commit -m "Initial commit" [master (root-commit) 61ff22c] Initial commit 1 file changed, 1 insertion(+) create mode 100644 file
$ git commit -m "Initial commit"
[master (root-commit) 61ff22c] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 file

The -m switch defines the message that describes the commit. Now file1 is tracked inside the repository.

Status

One really helpful command is status. This allows you to see what’s happening inside your working directory. Now, modify file1 and change something, and also create a new file called file2 and fill it with whatever you like. Once done, issue:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ 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: file1
Untracked files:
(use "git add <file>..." to include in what will be committed)
file2
$ 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: file1 Untracked files: (use "git add <file>..." to include in what will be committed) file2
$ 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:   file1

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

        file2

As you can see, the status command shows what is happening in the working directory. Now, do:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git add file1
$ git add file2
$ git commit -m "Second commit"
[master 3dfc702] Second commit
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 file2
gitaddfile1 git add file2 $ git commit -m "Second commit" [master 3dfc702] Second commit 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 file2
$ git add file1
$ git add file2
$ git commit -m "Second commit"
[master 3dfc702] Second commit
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 file2

In this way you will accept the changes made to file1, add the file2 to repository and commit both.

Removing files

Since we managed to create file2 and add it to repository, now file1 is useless, so we need to remove it:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git rm file1
rm 'file1'
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: file1
gitrmfile1rmfile1 git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: file1
$ git rm file1
rm 'file1'
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    file1

As you can see we removed the file1 from the repository. But that doesn’t mean it has been removed entirely. If you check it is still inside the working directory. Now let’s commit the changes:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git commit -m "Third commit"
[master ea0848a] Third commit
1 file changed, 1 deletion(-)
delete mode 100644 file1
$ git commit -m "Third commit" [master ea0848a] Third commit 1 file changed, 1 deletion(-) delete mode 100644 file1
$ git commit -m "Third commit"
[master ea0848a] Third commit
 1 file changed, 1 deletion(-)
 delete mode 100644 file1

Log: a bit of history

Now we’ve done quite the work! But how do we verify each change we’ve made has been recorded? Can we really trust the commit command? We can verify everything we’ve done until now with the log command:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ git log
commit ea0848abbb359c8a294e72785a095e83bc28cd20
Author: mark <mail@example.com>
Date: Tue Nov 22 12:11:32 2016 +0100
Third commit
commit 3dfc7021d6bb957dbd808c4d38e874942d72ce01
Author: mark <mail@example.com>
Date: Tue Nov 22 12:04:51 2016 +0100
Second commit
commit 61ff22ce986db714c34a01bcee0dfe6e56eb098d
Author: mark <mail@example.com>
Date: Tue Nov 22 11:53:00 2016 +0100
Initial commit
$ git log commit ea0848abbb359c8a294e72785a095e83bc28cd20 Author: mark <mail@example.com> Date: Tue Nov 22 12:11:32 2016 +0100 Third commit commit 3dfc7021d6bb957dbd808c4d38e874942d72ce01 Author: mark <mail@example.com> Date: Tue Nov 22 12:04:51 2016 +0100 Second commit commit 61ff22ce986db714c34a01bcee0dfe6e56eb098d Author: mark <mail@example.com> Date: Tue Nov 22 11:53:00 2016 +0100 Initial commit
$ git log
commit ea0848abbb359c8a294e72785a095e83bc28cd20
Author: mark <mail@example.com>
Date:   Tue Nov 22 12:11:32 2016 +0100

    Third commit

commit 3dfc7021d6bb957dbd808c4d38e874942d72ce01
Author: mark <mail@example.com>
Date:   Tue Nov 22 12:04:51 2016 +0100

    Second commit

commit 61ff22ce986db714c34a01bcee0dfe6e56eb098d
Author: mark <mail@example.com>
Date:   Tue Nov 22 11:53:00 2016 +0100

    Initial commit

As you can see, the log command shows the commits that we have committed to the repository. It also shows many important things about the commits:

  • The commit hash: that string after the “commit” keyword identifies each commit unequivocally in the repository.
  • The author.
  • The date.
  • The commit message.

Conclusion

You now know the fundamental commands to move around in a git repository. You know how to add and remove files, view the working directory status, commit changes, and visualize the history of the repository.

Image courtesy of mark | marksei
mark

You may also like...

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.