# GIT
###### tags: `mobile-development` `backend`
## Task submission workflow
`task repo -> fork -> clone -> solve -> add and commit -> push -> pull request`
You can click [here](https://hackmd.io/vLj10p1ERiqroVI5FezxAw) for more details.
## What is Version Control?
> Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. So ideally, we can place any file in the computer on version control.
## So What is Git?
Git is a version-control system for tracking changes in computer files and coordinating work on those files among multiple people. Git is a Distributed Version Control System. So Git does not necessarily rely on a central server to store all the versions of a project’s files. Instead, every user “clones” a copy of a repository (a collection of files) and has the full history of the project on their own hard drive. This clone has all of the metadata of the original while the original itself is stored on a self-hosted server or a third party hosting service like GitHub.
Git helps you keep track of the changes you make to your code. It is basically the history tab for your code editor. If at any point while coding you hit a fatal error and don’t know what’s causing it you can always revert back to the stable state. So it is very helpful for debugging. Or you can simply see what changes you made to your code over time.
## Git Workflow:
Before we start working with Git commands, it is necessary that you understand what it represents.
### What is a Repository ?
A repository a.k.a. repo is nothing but a collection of source code.
There are four fundamental elements in the Git Workflow.
**Working Directory, Staging Area, Local Repository and Remote Repository.**
If you consider a file in your Working Directory, it can be in three possible states.
1. It can be `staged`. Which means the files with the updated changes are marked to be committed to the local repository but not yet committed.
2. It can be `modified`. Which means the files with the updated changes are not yet stored in the local repository.
3. It can be `committed`. Which means that the changes you made to your file are safely stored in the local repository.
* `git add` is a command used to add a file that is in the working directory to the staging area.
* `git commit` is a command used to add all files that are staged to the local repository.
* `git push` is a command used to add all committed files in the local repository to the remote repository. So in the remote repository, all files and changes will be visible to anyone with access to the remote repository.
* `git fetch` is a command used to get files from the remote repository to the local repository but not into the working directory.
* `git merge` is a command used to get the files from the local repository into the working directory.
* `git pull` is command used to get files from the remote repository directly into the working directory. It is equivalent to a git fetch and a git merge .
## Step 0: Make a GitHub Account.
If you don’t already have one, you can make one [here](https://github.com/).
## Step 1: Make sure you have Git installed on you machine.
If you are on a Mac or a Linux Arch, fire up the terminal and enter the following command:
`$ git --version`
This will prompt open an installer if you don’t already have git. So set it up using the installer. If you have git already, it’ll just show you which version of git you have installed.
If you are running Linux(deb), enter the following in the terminal:
`$ sudo apt install git-all`
Go to this [link](https://gitforwindows.org/) for more info on how to get it.
## Step 2: Tell Git who you are.
Mention your Git username and email address, since every Git commit will use this information to identify you as the author.
`$ git config --global user.name "YOUR_USERNAME" `
`$ git config --global user.email "janedoe@gmail.com"`
`$ git config --global --list #For checking`
## Step 3: Let’s Git
* Create a new repository on GitHub. Follow this [link](https://github.com/new).
Now, locate to the folder you want to place under git in your terminal.
`$ cd <dir_name>`
* Initialize Git:
And to place it under git, enter:
`$ touch README.md #To create a README file for the repository`
`$ git init #Initiates an empty git repository`
* Now go edit the [README.md](https://changelog.md/) file to provide information about the repository.
Add files to the Staging Area for commit:
* Now to add the files to the git repository for commit:
`$ git add . #Adds all the files in the local repository and stages them for commit`
OR if you want to add a specific file
`$ git add README.md #To add a specific file`
Before we commit let’s see what files are staged:
`$ git status #Lists all new or modified files to be committed`
* Commit Changes you made to your Git Repo:
Now to commit files you added to your git repo:
`$ git commit -m "First commit"
#The message in the " " is given so that the other users can read the message and see what changes you made`
## Step 4: Multiple branches
`git checkout <branch_name>`
## Step 5: Github collaboration
Online demo