[Add]
It is used to add file contents to the Index (Staging Area) from Working Directory.
The git add command can be run many times before making a commit.
These all add operations can be put under one commit.

[Blame]
It shows the author information of each line of the project's last modified source file.
It is used to show revision and author last modified each line of a file.
It displays the details of the author who last modified or added each line of code in a given file along with the commit id of modification.
It is used to find the author name and commit information of the last modified version of the source file.

[Branch]
If add a new feature or fix a bug, spawn a new branch to summarize changes.
It allows developers to diverge from the production version of code to fix a bug or add a feature.
Developers create branches to work with a copy of the code without modifying the existing version.
It create branches to isolate your code changes, which test before merging to the main branch.

[Commit]
It is used to record the changes in the repository.

[Checkout]
It is used to switch between branches in a repository.
The git checkout command operates upon three different entities which are files, commits and branches.

[Clone]
It is the act of making a copy of any target repository.
It can clone your repository from the remote repository to create a local copy on your system.

[Cherry-Pick]
It applying one particular commit id from one branch into another branch.
Git cherry-pick will pick only one commit id whatever select and merges with commits which are there in current branch.
In case made a mistake and committed a change into the wrong branch, but do not want to merge the whole branch.
It is a useful tool, but always it is not a good option, it can cause duplicate commits. So if necessary it will useful tool for a few situations.
Copy the particular commit id from existing current branch and switch to another branch there apply that particular commit id by using cherry-pick command.
It is necessary in case of bug fixing because bugs are fixed and tested in the development branch with their commits.

[Fetch]
It downloads commits, objects and refs from remote repository to local repository.
It downloads only new data from a remote repository to local repository (.git).
So the changes/modification in the files does not integrate into working directory from remote repository.

[Head]
It is a reference that points out the latest recent commit in the current checkout branch.
It is just like a pointer that keeps track of the latest commit in current branch.
If the Head doesn't point to most latest recent commit such state is called detached Head.
If the checkout with an older commit it will stand the detached Head condition.
So do not commit on detached Head.

[Init]
It is used to create a new blank repository.
It is used to make an existing project as a Git project.
Several Git commands run inside the repository, but init command can be run outside of the repository.
It creates a .git subdirectory in the current Working Directory.
It newly created subdirectory contains all of the necessary metadata.

[Log]
It is a record of commits.
COMMIT_ID = It is a 40 character checksum data generated by SHA (Secure Hash Algorithm) algorithm. It is a unique number.
Author = The information of authors such as author name and email.
Date = It a date timestamp for the time of the commit.
COMMIT_MESSAGE = It is the overview of the commit given in the commit message.
If run the git log command and stuck there, then press the q (Q for quit). It will quit you from the situation and back you to the command line.

[Merge]
It allows to merge the other source branch with the currently active branch.
The git merge command also will merge the specified commit id from source branch to the currently active branch.
Merge is always a forward changing record. It merges the different commit id's one by one.
Then compare to Rebase will do rewriting the entire commit id history in order to produce a straight, linear process of commits.

[Pull / Pull Request]
git pull = git fetch + git merge
It fetches and merges the entire changes include files, commits, objects, refs on the remote repository into local repository (.git) and then into working directory.
It fetches and merges changes include files, commits, objects, refs from the remote repository to working directory.
Pull Request is a process for a developer to notify team members that they have completed a feature.
Pull Request is happened through via their remote repository server account.
Pull Request announces all the team members that they need to review the code and merge it into the master branch.

[Push]
It upload local repository content to a remote repository.

[Revert]
It is an undo type command.
It does not delete any data in this process, instead it will create a new change with the specified new commit id.
It is a forward-moving undo operation that offers a safe method of undoing changes.
Instead of deleting commits in the commit history, a revert will create a new commit that inverses the changes specified.
A revert is safer than a reset because it will not remove any commits from a shared history.
A revert will retain the commits you want to undo and create a new commit that inverts the undesired commit.

[Rebase]
It is used to integrate all commit id and changes from one branch onto another branch.
Rebase will do rewriting the entire commit id history in order to produce a straight, linear process of commits based on one branch into another current working branch.

[Reset]
It is used for undo local changes.
It use when we want to move the repository back to a previous commit, discarding any changes made after that latest commit.
► Soft
► Mixed
► Hard

[Restore]
It helps to discard uncommitted from Working Directory and also to discard unstage from Staging Area.
It can be used to undo the effects of git add and unstage changes have previously added to the Staging Area.

[Remote]
It allows accessing the connection between remote and local.
Origin is the default name for the remote server, which is given by Git.

[Status]
It allows us to see the tracked, untracked files and changes.

[Stash]
Sometimes want to switch the branches, but are working on an incomplete part of current project.
If don't want to make a commit of half-done work.
The git stash command enables to switch branches without committing the current branch.
The git stash command means is used to store something safely in a hidden place. It temporarily saves data safely without committing.
If any changes is happened, then Git will not allows to switch the branch and ask to commit (OR) stash the changes.

[Switch]
It is used to switch between branches in a repository.
The git switch command operates only switch between the existing branches, it doesn't support operates like files, commits.

[Tags]
It make a point as a specific point in Git history.
It used to mark a commit stage as relevant.
It can have any number of tags on a branch or different branches. So tags are created to the branches.
when to create a Tags:
If want to create a release point for a stable version of code.
► Light-Weighted
It does not store unnecessary information to keep it light-weight.
► Annotated
It contain some additional information like author name and other project related information.
It store extra Metadata like developer name, email, date, and more.
It stored as a bundle of objects in the Git database.

[.git]
The .git is also known as Git database.
The .git folder contains all information that is necessary for the project and all information relating commits, remote repository address, etc.
It also contains a log that stores the commit history. This log can help you to roll back to the desired version of the code.
All snapshots of the modifications will be recorded in this folder like a database, which makes it possible to undo the changes and rollback to the desired version of the code.
The .git folder is hidden to prevent accidental deletion or modification of the folder.
The version history of the code base will be lost if this folder is deleted.
It will not be able to rollback changes made to the code in future.
The root structure for .git:
► hooks
This folder contains script files.
The hooks are the scripts that are executed before or after events like commit, push etc.
This folder has a few script files inside it. These script files are known as Git Hook Scripts.
► info
► logs
It contains history for different branches.
► objects
In Git everything is saved in the objects folder as a hash value.
By everything mean every commit, every tree or every file that create is saved in this directory.
With every object, there is a hash value linked to it, through which Git knows where is what.
► refs
This folder stores information about tags and branches.
► COMMIT_EDITMSG
► config
► description
► HEAD
It contains the reference to the branch we are currently working on.
This file stores reference to the current branch.
It points to the master branch by default.
► index
This is a binary file and stores staging area information.

[.gitignore]
To create a ".gitignore" file in repository's root directory to tell Git which files and directories to ignore when make a commit.
Suppose the existing files already tracked by git are not affected.
It specifies untracked files that git should ignore the file.
