---
# System prepended metadata

title: '**What is GIT?**'

---


# **What is GIT?**

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.


## **GITEVERYDAY**
https://git-scm.com/docs/giteveryday

### **DESCRIPTION**

Git users can broadly be grouped into four categories for the purposes of describing here a small set of useful command for everyday Git.

* **Individual Developer (Standalone)** commands are essential for anybody who makes a commit, even for somebody who works alone.
* If you work with other people, you will need commands listed in the **Individual Developer (Participant)** section as well.
* People who play the **Integrator** role need to learn some more commands in addition to the above.
* **Repository Administration** commands are for system administrators who are responsible for the care and feeding of Git repositories.


### *Individual Developer (Standalone)*
A standalone individual developer does not exchange patches with other people, and works alone in a single repository, using the following commands.
* **git init** to create a new repository.
* **git log** to see what happened.
* **git switch** and **git-branch** to switch branches.
* **git add** to manage the index file.
* **git diff** and **git-status** to see what you are in the middle of doing.
* **git commit** to advance the current branch.
* **git restore** to undo changes.
* **git merge** to merge between local branches.
* **git rebase** to maintain topic branches.
* **git tag** to mark a known point.


### *Individual Developer (Participant)*
A developer working as a participant in a group project needs to learn how to communicate with others, and uses these commands in addition to the ones needed by a standalone developer.
* **git clone** from the upstream to prime your local repository.
* **git pull** and **git- etch** from "origin" to keep up-to-date with the upstream.
* **git push** to shared repository, if you adopt CVS style shared repository workflow.
* **git format patch** to prepare e-mail submission, if you adopt Linux kernel-style public forum workflow.
* **git send email** to send your e-mail submission without corruption by your MUA.
* **git request pull** to create a summary of changes for your upstream to pull.


### *Integrator*
A fairly central person acting as the integrator in a group project receives changes made by others, reviews and integrates them and publishes the result for others to use, using these commands in addition to the ones needed by participants.

This section can also be used by those who respond to **git request-pull** or pull-request on GitHub (www.github.com) to integrate the work of others into their history. A sub-area lieutenant for a repository will act both as a participant and as an integrator.
* **git am** to apply patches e-mailed in from your contributors.
* **git pull** to merge from your trusted lieutenants.
* **git format patch** to prepare and send suggested alternative to contributors.
* **git revert** to undo botched commits.
* **git push** to publish the bleeding edge.


### *Repository Administration*
A repository administrator uses the following tools to set up and maintain access to the repository by developers.
* **git daemon** to allow anonymous download from repository.
* **git shell** can be used as a restricted login shell for shared central repository users.
* **git http backend** provides a server side implementation of Git-over-HTTP ("Smart http") allowing both fetch and push services.
* **gitweb** provides a web front-end to Git repositories, which can be set-up using the **git instaweb** script.

update hook howto has a good example of managing a shared central repository.

In addition there are a number of other widely deployed hosting, browsing and reviewing solutions such as:
* gitolite, gerrit code review, cgit and others.
