My Learnings from using Git along with VSCode
Tags: git, github, vscode, master
Published: 2020-06-04 09:24:41

I decided to start with Git & Github for one of my existing project. 

I started with creating a Github Repo with my account. 

### Mistake #1 
I initiated the repo with Readme & .gitignore. Since I already have a project to publish to github, you should keep it blank or otherwise you will get error asking to pull first and that pulling will also fail due to history unmatch error, same as me :)

## Initialize Git

First install git from [https://git-scm.com/](https://git-scm.com/) and its better to install Powershell as well if not installed before. (Only for Windows users 😋)

Then open project folder in VSCode and click the third icon from the left menu called "Source Control" and click "Initialize Respository"

![Init Repo on VSCode](https://dev-to-uploads.s3.amazonaws.com/i/no6nu48hnvewj5ek9z5n.jpg)

### Terminal way. 

Open VSCode and press ``Ctrl + ` `` to open integrated terminal. In my case its powershell. 

Now type the following command. 

```powershell
> git init
```

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/dkcpak6n8gye2zkjk2nj.jpg)

## Adding a Remote Server (Connect to Github)

Inside VSCode press `CTRL+SHIFT+P` and type "Git Origin", Select the same from the list and add your Origin URL (ie github *.git URL)

The same can be done via terminal. See below.

```powershell
$ git remote add origin https://github.com/user/repo.git
```

Once added you can commit your changes by clicking the "Tick Icon" in Source control Tab. When you are ready to push to github, click the 3 dots ... menu and choose "Push". 

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/odgq3j3pqy6uwtzl3c7d.jpg)

This is where I did wrong. As I already have an existing project but Github is initiated with Readme, it asks to pull first. When doing that it pops another error says the history is not matching. 

If you got this error, please read Mistake #1 to avoid this later. For now, you can use the below code to overwrite it. 

```powershell
$ git pull origin master --allow-unrelated-histories
```

## Git Stash & POP
This is useful when there are multiple people working on same project or working on multiple branches. 

What Git Stash do is to save all of our working files in a temporary storage and revert to the original state. So that we don't lose our changes. From there you can pull latest and commit using Git Stash Apply or Pop. 

### When do you need this? 
1. When any other developer modified same files and you want to see / work on that updated files. 
2. When you mistakenly worked on X feature branch but should actually be Y feature branch. 

Commands

```powershell

$ git stash 
// Stash current directory and revert to original

$ git stash save "message"
// save in a spearate stash (multiple stash)

$ git stash list
// See current stash

$ git stash apply
// Apply saved stash but keep the stash

$ git stash pop
// apply saved stash and delete

```
Then after these commands, you will be able to to pull / push as usual. 

----------

Some stackoverflow answers also mentions the use of `--force` or `-f` tag but if its in case of big project it might get messed up. 

## Git Checkout Branch 

Branch is a powerful feature in git where you can make edits to a project without affecting the main source code.

### Checkout existing branch

To checkout existing branch, use the following command

```powershell

$ git checkout existing-branch-name 

```

### Creating new branch

To create a new branch, use the following command

```powershell

$ git checkout -b new-branch-name 

```

These commands will change the current working directory to your newly selected branch.

----------

I will be adding more findings when I learn them, If you have any suggestions to improve my Git workflow, comment below. 

Peace!