Git
Version control system
Git is a branching version control system based in the file system and operated via the command line (although graphical user interfaces exist). The core concept of Git is that of the commit, which bundles a set of changes (known as a diff) alongside a message, timestamp, and other metadata. By replaying a set of commits, a computer is able to recreate a list of changes to a file over time.
§ Core Concepts
A Git tree is a representation of a directory of files; each commit represents a tree at a certain point in time. Most commits record changes in relation to a previous “parent” tree; commits which have no parent are known as root commits. Commits are identified by a SHA‐1 hash, and may additionally be tagged with a human‐readable name.
A branch, like a tag, is simply a human‐readable pointer to a commit. Unlike tags, branches are often updated when new commits are made.
The index or “staging area” is a temporary list of changes which will form the diff of the next commit. The index often does not match the working tree, which is the files as they exist in your filesystem. This separation allows users to selectively stage or unstage files from being committed, sometimes on a line‐by‐line basis, so that a large number of changes can easily be broken up into a number of smaller commits.
Two or more parent commits can be combined through a merge commit. Git features a number of merge strategies for automatically resolving merges by walking the list of parent commits and comparing changes; however, sometimes manual intervention is necessary.
Git is able to push and pull commits, branches, and tags from a remote server, often simply called a remote. Because a list of commits provides everything needed to replay a set of changes on a different machine, this allows for distributed, collaborative workflows.