---
# System prepended metadata

title: GIT AND GIT HUB

---

# GIT AND GIT HUB
**GIT: WHAT IS GIT?**

This is a distibuted version control system that helps developers to track their codebases, and collaborate with others to manage multiple versions of a project.
 
 **GIT** is decentralized and so you dont need a central server. instead every developer has a full copy of the repo on thier local machine. so that you can role back to a certian version when you need to.
 
  **FEATURES OF GIT**
 <ul>
	<li>Distributed system</li>
	<li>Version Tracking</li>
	<li>Collaboration</li>
	<li>Branching</li>
	<li>Merging</li>
	<li>Remote repositories</li>
	<li>Extensive Tooling</li>
	<li>Staging Area</li>
	<li>Speed</li>
	<li>Open-Source & Free</li>
</ul>
<hr>

**GitHub: WHAT IS GITHUB?**

**GitHub** is a web-based platform used for version control and collaboration. it hosts repositories and provides an interface to manage your code and other underlying services.


**FEATURES OF GITHUB**
<ul>
	<li>Collaboration</li>
	<li>Bug Tracking</li>
	<li>Feature Requests</li>
	<li>Task management</li>
	<li>Wikis</li>
</ul>


FIRST of all understand the git workflow

 Working Directory
 Staging Area 
 Local Repo
 Remote Repo

**THINGS TO UNDERSTAND**

-Initialize a new repository 	(workig directory)

`.git init`
-Add you files to the staging area

`git add` 

To  take files to local repo
`git commit `

To take file to remote repo
`git push`


To pull changes back to working directory
`git pull` 


To pull a repository for first time
`git clone `

**BRANCHING AND MERGING **

Brancihng alllows you to work on new features or bug fixes without affecting the main codebase. Wheb ready, youu can merge the new code into the main branch


**SETTING UP GIT USING THE TERMINAL (LINUX BASED SYSTEM)**
 
 To set up username
 
```git config --global user.name "<your_username>"```

to set up email

```
git config --global user.email "<your_email>"
```
To check git branch

`git config --global init.defaultBranch`


To change branch

`git config --global init.defaultBranch main`

**TO OPEN A FOLDER IN VS CODE** 

Enter a folder in the terminal and type `code .`


To initialize git repository type `git init`
this would create a hidden folder .git 

To check status input
`git status`


To add files to staging area;

Individually
type `git add <your_file>`

All
type `git add .`


To add files to local repo

type
`git commit`
for this command to go through there must be a message

type this command instead
` git commit -m "<anything_you_want_as_a_message"`

To check changes type
`git log`

To push to a repo

`git remote add origin <your_git_link>`
next
`git branch -M main`

To push

`git push -u origin main`


**THINGS TO NOTE**
git pull: To pull from upstream
git clone: get a copy of the full repo on your local machine 
git pull:get changes from a repo
git fetch: get latest changes without merging
forking: copy a repository into your own account

**WORKING WITH BRANCHES**


To branch
`git checkout -b <name_of_branch>`
 
 
 To add branch to stagging area
 `git add .`
 
 Then commit to save changes made to branch
` git commit -m "<aded-new feature>"`

 then push
 
`then git push -u origin added-new feature`

To go back to main 
`git checkout main`

To check available branches

`git branch`
this would list the branches

to merge you type
`git merge <added-new feature>`
this would merge it to the main branch 

then you push 


to delete branch
`git branch -d <added-new feature>`

then `git push`

you should be done.....
thanks for visiting