[Version Control System (VCS)]
Git is a modern and widely used distributed Version Control System (VCS) in the world.
The Version Control System (VCS) allows us to monitor/track and work together with team members at the same workspace.
Git is foundation of many services like GitHub, Bitbucket and GitLab.
Git can be used privately and publicly.
➤ Features
* Open Source 
It is released under the GPL (General Public License) license.
* Scalable
It means when the number of users increases, the Git can easily handle such situations.
* Distributed
It means that instead of switching the project to another machine, we can create a "clone" of the entire repository.
Also, instead of just having one central repository that send changes to, every user has their own repository that contains the entire commit history of the project.
We do not need to connect to the remote repository; the change is just stored on local repository. If necessary, we can push these changes to a remote repository.
* Security
It uses the SHA1 (Secure Hash Function) to name and identify objects within its repository.
Files and commits are checked and retrieved by its checksum at the time of checkout.
It stores its history in such a way that the ID of particular commits depends upon the complete development history leading up to that commit.
* Speed
Git is very fast, so it can complete all the tasks in a while.
Most of the git operations are done on the local repository, so it provides a huge speed.
* Supports non-linear development
➤ Types
* Localized
The programmers developed local VCSs that had a simple database.
Such databases kept all the changes to files under revision control.
A local version control system keeps local copies of the files.
* Centralized
It is a central server to store all the database and team collaboration.
* Distributed
The user has a local copy of a repository.
The local repository contains all the files and metadata present in the main repository.
It enhances the ability to work offline.

[Source Code Management (SCM)]
GitHub, Bitbucket and GitLab is a Git repository hosting service.
It provides a Web-based graphical interface.
It hosts source code of project in the form of different programming languages and keeps track of the various changes made by programmers.
It supports both VCS and SCM.

{Architecture}
There are 3 phases.
            Working Directory -----> Staging Area (index) -----> Local Repository <==============> Remote Repository
            |.............................PC/Laptop.............................|

[Git .vs. SVN]
⦿ Git 
It is a distributed Version Control System.
It has a cloned repository.
Git branches are familiar to work.
Git does not have a Global revision number.
⦿ SVN
It is a Centralized Version Control System.
It does not have a cloned repository.
SVN branches are a folder which exists in the repository.
SVN has a Global revision number.

[WorkFlow / Branching Model / Branching Strategy]
* The below two branches (Master, Develop / Development) are called as Primary Branches.
► Master
It contains the source code of HEAD that always reflects a final version of the project.
Stable Production Code without any changes.
This branch contains Production Code. All Development code means Development Branch is merged into Master Branch.
► Develop / Development
Staging OR Pre-Prod Code.
* The below three branches (Feature, Release, Hotfix) are called as Support Branches.
► Feature
This Feature branch created from Develop / Development branch.
It is used to develop a new feature for the next version of the project.
It is deleted after its feature has been merged with develop branch.
So then updated code is merged back into the Develop / Development branch.
► Release
This Release branch created from Develop / Development branch.
It allow for minor bug fixes OR fix the defects and preparing meta-data for a release (version number, build dates, ... etc).
So then updated code is merged back into the Develop / Development branch and Master branch.
► Hotfix
This Hotfix branch created from Master branch.
To patch the production releases OR It created for bugs in production releases.
That all the bugs for a production release should be resolved in a single Hotfix branch.
That after all the production bugs are resolved, the updated code is merged back into the Development branch and Master branch OR It gets merged into both Branches like Master and Development. 
After merge make sure the Hotfix branch is deleted.
# Link :- https://nvie.com/posts/a-successful-git-branching-model/
