Git basics - Git + Hub makes it easy ✨💡👍
Tags: github, git, tutorial, beginners
Published: 2019-07-15 13:27:44

From being cool hipster kid, Git has transformed into an absolute necessary in your toolkit.

> Mastering Git is essential and important thing in your career.

Here is a quick list of commands that you might need to use:  

> Note: By no means this is a complete Git 101. But just a few commands that will be useful.

# Setup

Install [Hub](https://hub.github.com) from GitHub. 

For Mac `brew install hub`
For Windows `scoop | choco install hub`
For Fedora `sudo dnf install hub`
For Debian `sudo apt install hub` 

> Create an alias for hub as `git`

# Configuration
The most important thing with Git is to add your username and email configuration. You can set the user name and email configuration globally using the following commands.

```
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
```

# Create a project
To create a project to both  local and remote with out opening browser.

```
$ mkdir awesome-project
$ cd awesome-project
$ git init                          // Initializes git repo
$ git add .                        // Adds files and directories
$ git commit -am "Initial commit" // commits the changes
$ git create                     // Creates a remote repository
$ git push                      // push the changes
```

🎉🎉🎉

# Clone a project 

Interested in a project and want to contribute? You can clone and use the repository. 

```
$ git clone <org>/<repository> // Clone the repo
$ cd <repository>             // Go inside
```

It is something that you want to contribute for a long time or customize something. Well you can fork it too.

```
$ git fork --remote-name=origin  // Fork the repo
```

# Checkout the branch

Working on a `feature` branch. Check them out.

```
$ git checkout <branch-name>
```

> Have some intermediate working files? Want to store it temporarily, `stash` it.

```
$ git stash
$ git checkout <branch-name>
```

> Want to go back to stash. 

```
$ git stash list
$ git stash apply 
```

# Checkout the PR

But sometimes you just need to checkout a PR to check. Maintainers (or) reviewers will :heart: it.

```
$ git pr list -L 20 --format='%t [%H] | %U%n' // List down the PRs
$ git pr checkout  <pr-number>               // Check out a particular PR
```

Well in mid of PR review and there are more changes don't worry.

```
$ git am -3 https://github.com/<org>/<repo>/pull/<pr-number>
```

# Created a PR - Want to rebase it to a single commit

Most project maintainers, want their Git history clean. This simple task will make the project history easy to understand and maintain. Often you might have faced situations where the maintainers will ask you to rebase the commit to single commit. 

```
$ git rebase -i HEAD~<number_of_commits>
```

Well, that is easy but it will be tricky when you want to rebase wit master or with some merge conflicts. You can address that by:

```
$ git rebase -i master
// (fix the conflicts)
$ git add .
$ git rebase --continue
```

Want to abort it via `git rebase --abort`.

# Browse issues

Wanna look the issues to grab. Find it difficult to type the entire GitHub URL. You can do it with `hub`.

```
$ git browse --issues
```

# Other commands that I use a lot

To get the status of my current repository
```
$ git status
```

To log the commit history 
```
$ git log
```

To amend the commit log

```
$ git commit --amend 
<amend the commit>
```

To sign off a commit:
```
git commit --amend --signoff
```