---
# System prepended metadata

title: Git intro

---

# Git intro
First thing to do is to setup your identity. This identifies you to other people who download the project.
```
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
```


Because we are using ssh do the following steps:
1. Open a terminal
2. Go to your home directory by typing cd ~/
3. Type the following command ssh-keygen -t rsa
4. This will prompt you to enter a filename to store the key
5. Just press enter to accept the default filename (/Users/you/.ssh/id_rsa)
6. Then it will ask you to create a passphrase. This is optional, either create a passphrase or press enter for no passphrase
7. When you press enter, two files will be created
    *    ~/.ssh/id_rsa
    *    ~/.ssh/id_rsa.pub
8. Your public key is stored in the file ending with .pub, i.e.: 
    * ``` ~/.ssh/id_rsa.pub```
9. Copy the ssh
```pbcopy < ~/.ssh/id_rsa.pub```
10. Once you have copied your public SSH key, login to your GitHub account and go to https://github.com/settings/profile
11. On the left-hand side menu, you will see a link “SSH and GPG keys”
12. Click on that link which will take you to a page where you can enter your public SSH key that you copied earlier.
13. Click the button which says ‘New SSH key’
14. Then enter a title name - can be anything, e.g. newMac
15. Paste the public SSH key in the key textbox
16. Click “Add SSH key”


Clone the repo:
```
git clone git@github.com:LinumLabs/github-workshop.git
```


Create a branch
``` git checkout -b my-branch ```
in Linum we use this convention of branch names 
```
feature/mm/ticket-number
fix/mm/ticket-number
```


Add files:
``` 
touch bob.txt alice.txt 
```

Add files to git:
```
git add .
```
Add commit message: 
```
git commit -m "Commit message"
```

Push:
```
git push
```
Pull:
```
git pull
```

Create new origin:
If forking is not a option and you need to import other project lets say like a boilerplate
```
git remote add web3 git@github.com:LinumLabs/web3-task.git
```

Pull from other remote:
```
git pull web3 master
```

If you are working on some project specific and want to push some changes to remote
```
git push web3
```
It will create same branch name with same changes that you made



If you are working on wrong branch and need to checkout with current changes
```
git stash --include-untracked
```
Create or change branch
``` 
git checkout branch-name
```
Create new:
``` 
git checkout -b branch-name 
```
Apply latest stash
``` 
git stash pop
```
For these steps I would recommend using VSCode and do it through UI.


Differences between git stash apply and git pop:

* git pop: ‘pops’ the changes from the stash and applies them to the current code
* git stash apply: keeps the changes in the stash and applies the changes to the current code

If something happens with merge of remote branch:
```
git pull origin branchname --allow-unrelated-histories
```