Fact-checked by Grok 2 weeks ago

Git

Git is a and open-source distributed licensed under the GNU General Public License version 2.0 with a linking exception, designed to handle everything from small to very large projects with speed and efficiency. Created by in April 2005, it emerged as a response to the Linux kernel development community's need for a after the proprietary tool became unavailable for open-source use. Git enables developers to track changes in files—particularly —over time, allowing recall of specific versions and facilitating collaboration among teams through mechanisms like distributed repositories and non-linear workflows. At its core, Git operates as a distributed version control system (DVCS), meaning every developer has a full copy of the project's history on their local machine, unlike centralized systems that require constant server access. This design supports key features such as lightweight branching for parallel development, efficient merging of changes, and high performance even with massive codebases like the , which involves thousands of contributors. Commands like git commit, git branch, and git merge form the backbone of its workflow, providing both high-level operations and low-level access to internals for advanced customization. Since its inception, Git has evolved into the most popular system in , powering platforms like and that host hundreds of millions of repositories. Its adoption stems from advantages including through cryptographic hashing, offline capabilities, and for open-source and projects alike. By 2025, Git remains the standard tool for collaborative coding, with ongoing releases—such as version 2.52.0 in November 2025—enhancing usability and performance.

History

Development Origins

Git's development originated from the need for a robust, open-source system for the project. In early 2005, , the creator of , grew frustrated with the proprietary system, which had been used by the kernel community since 2002 but whose free access was revoked following a dispute between the Linux developers and BitMover, the company behind . This breakdown highlighted the risks of relying on a commercial tool, prompting Torvalds to initiate the creation of a new distributed system on April 3, 2005, to ensure the 's development could continue without proprietary constraints. Torvalds rapidly prototyped Git, completing the initial version with core features such as within just a few days; the first commit occurred on April 7, 2005, marking the system's basic functionality for tracking changes efficiently. This swift development was driven by Torvalds' experience with BitKeeper's strengths, like its distributed model, but aimed to surpass limitations in speed and openness for large-scale projects like the . Early testing integrated Git into kernel workflows by mid-April, demonstrating its viability as a replacement. Key early contributions came from developers like Junio C. Hamano, who joined shortly after the initial commit and took over as project maintainer on July 26, 2005, at Torvalds' request, allowing the system to evolve beyond its prototype stage. This transition solidified Git's adoption for development, replacing entirely by the end of 2005 and enabling a fully open-source, distributed for global contributors. Git reached version 1.0 on December 21, 2005, under Hamano's leadership, after 34 intermediate releases that refined its stability and established it as a reliable tool for in production environments. This milestone marked Git's readiness for broader use beyond the kernel, emphasizing its efficiency and non-linear development support.

Naming and Early Releases

The name "Git" originated from British English slang for a foolish or unpleasant person, a choice made by in a self-deprecating nod to naming his projects after himself, similar to . Torvalds later described it as a made-up for "Global Information Tracker," though he emphasized this was coined after the fact and not the primary intent; other proposed interpretations, such as "Graph Integrity Tester," have been dismissed as unfounded. The name was selected for its pronounceability, uniqueness among Unix commands, and simplicity, reflecting Torvalds' goal to create a straightforward tool. Git was rapidly adopted by the project in April 2005, shortly after Torvalds' initial implementation, replacing for managing due to its speed and distributed nature. By 2006, Git had expanded beyond the to other open-source projects, gaining traction for its efficiency in handling large repositories and non-linear development workflows. This early adoption laid the foundation for Git's broader use, with the first stable release (version 1.0) arriving in December 2005 under the stewardship of Junio Hamano, who took over maintenance from Torvalds in July 2005 to focus on stabilizing the codebase. Hamano played a pivotal role in Git's maturation by establishing the official git.git repository for ongoing development, which centralized contributions and enabled a distributed review process that improved code quality and documentation. Key release milestones followed: Git 1.5.0 in February 2007 introduced user-friendly "" commands, such as interactive git add and enhanced reflog support for tracking , making the tool more accessible beyond expert users. Git 1.6.0 in August 2008 brought significant performance optimizations, including reduced memory usage in pack operations and faster blame computations, alongside refinements like delta-base-offset encoding in packfiles. The progression continued with Git 2.0 in May 2014, which implemented smarter defaults—such as changing the git push behavior from "matching" to "simple" to prevent accidental pushes to unintended branches—easing the for new users while maintaining compatibility for veterans. These releases under Hamano's guidance transformed Git from a kernel-specific tool into a robust, widely applicable system, emphasizing reliability and incremental enhancements. In April 2025, Git celebrated its 20th anniversary since the first commit on April 7, 2005. Events included Git Merge 2025 conference and interviews with , who reflected on Git's rapid creation in just 10 days and its unexpected enduring success as the dominant version control system.

Core Design

Fundamental Principles

Git operates as a system (DVCS), in which every of a serves as a complete, self-contained containing the full project . This design enables developers to perform all version control operations offline, without reliance on a central , fostering and resilience against server failures. For instance, if the primary server becomes unavailable, any clone can be used to restore the repository by pushing its contents back. Unlike centralized systems such as , where clients only hold working copies and must connect to a single authoritative for access, Git's model supports independent work and collaboration across multiple remotes. A foundational aspect of Git is its use of , where all data objects—files, directories, commits, and tags—are stored and referenced by unique hashes derived from their contents. Git supports SHA-256 as an alternative since version 2.29 (2020), with an ongoing transition underway to address SHA-1 vulnerabilities; SHA-256 is planned to become the default in Git 3.0. This hashing mechanism, producing 40-character identifiers like d670460b4b4aece5915caf5c68d12f560a9fe3e4, ensures immutability: once an object is created, it cannot be modified without generating a new hash, thereby guaranteeing and preventing undetected corruption. Git treats the repository as a key-value store, allowing any content to be inserted and retrieved via its hash, which underpins the system's reliability in distributed environments. Git's history model is snapshot-based, with each commit capturing a complete, point-in-time representation of the entire rather than incremental between changes. A commit object references a tree object that recursively describes the and contents (as blobs) at that moment, enabling straightforward navigation and comparison of states. This contrasts with delta- systems that store only changes, simplifying Git's branching and merging while avoiding complex delta reconstruction. To optimize storage for these full snapshots, Git employs packfiles, binary files that compress objects by applying deltas to similar content and using zlib , significantly reducing disk usage—for example, packing two similar 22KB files might yield a 7KB packfile. The system's architecture emphasizes speed, simplicity, and support for non-linear development, principles championed by creator to address limitations in prior tools. Common operations like committing or creating branches are engineered to complete in under a second, even for large projects, by leveraging lightweight data structures—branches, for instance, are mere 41-byte pointers to commits, making them virtually cost-free to spawn and delete. This facilitates frequent experimentation, parallel workstreams, and easy integration, as seen in the development which involves numerous merges daily, promoting efficient, decentralized collaboration without performance bottlenecks. Despite these strengths, Git's principles introduce trade-offs, including a steep for users transitioning from centralized systems due to its decentralized workflows and abstract concepts like detached heads. Additionally, the retention of complete snapshots in every can lead to bloat over time, particularly with frequent commits or large files, though mechanisms like garbage collection (git gc) and packfiles help manage this by consolidating and compressing data.

Data Structures and Model

Git's data model is built around four primary object types that represent the content and history of a repository: blobs, trees, commits, and tags. Blobs store the raw content of files without any metadata such as filenames or paths, serving as immutable snapshots of file data. Each blob is identified by a hash of its content prefixed with the type and size, ensuring where identical files share the same blob. Trees represent directory structures, containing ordered lists of references to blobs or other trees, along with file modes (e.g., permissions like 100644 for regular files) and names, forming a hierarchical view of the repository at a given point. Commits encapsulate a tree object along with metadata including the author, committer, timestamps, commit message, and pointers to parent commits, creating a record of repository snapshots. Annotated tags are specialized objects that reference a commit, including additional metadata such as the tagger's name, email, date, and a message, often used for marking releases and supporting GPG signatures for verification. These objects are interconnected to form the repository's structure, with commits forming a (DAG) that models the of changes, where each commit points to a tree and potentially to previous commits as parents. This DAG enables efficient traversal of , branching, and merging without cycles, as the acyclic nature prevents loops in ancestry. Object storage begins with loose objects, which are individual zlib-compressed files stored in the .git/objects directory, organized by the first two hexadecimal digits of their SHA-1 hash as subdirectories and the remainder as filenames; this format is used initially for simplicity but becomes inefficient with many objects. To optimize space and performance, Git consolidates loose objects into packfiles, binary files that bundle multiple objects with delta compression—storing differences between similar objects rather than full copies—reducing redundancy, especially for incremental changes in files or trees. Packfiles are generated automatically during garbage collection (git gc) when thresholds like numerous loose objects or many packfiles are met, or during operations like pushing to remotes, and each packfile includes an accompanying index file for fast offset-based access. The for any object is computed using on a header consisting of the object type, a space, the decimal size of the content, a null byte, followed by the content itself. For example, a commit object's is derived as: \text{[SHA-1](/page/SHA-1)}\left("commit\ " + \text{size} + "\0" + \text{data}\right) where data includes the , , /committer details, and . This ensures cryptographic and immutability, as any alteration invalidates the and breaks references. Complementing the object store, the index—also known as the —is a (.git/index) that acts as an intermediate layer between the and the , tracking the state of files prepared for the next commit. It maintains a sorted list of entries with each file's , , stage number (for merge conflicts), hash of the staged content, and timestamps, allowing selective of changes via commands like git add before creating a new tree and commit. This design supports atomic commits by snapshotting only the indexed state, decoupling the working tree modifications from the committed history. For local recovery and auditing, Git maintains a reflog (reference log) that records all updates to references such as branches and HEAD, storing the previous values, timestamps, and the agent (e.g., user or command) responsible for each movement. Unlike the global commit DAG, the reflog is repository-local and transient, with entries expiring after 90 days by default (or 30 days for unreachable ones during garbage collection), but it enables of lost work by referencing prior states, such as after an accidental or rebase.

Workflow and Operations

Branching and References

In Git, branches serve as lightweight, movable pointers to specific commits in the repository's history, enabling developers to maintain parallel lines of development without duplicating data. Unlike heavier branching models in other systems, Git branches are essentially simple that point to a commit object, allowing for rapid creation and switching that incurs negligible overhead. A new is created by updating a reference to point to the current commit, typically through the HEAD pointer, which facilitates the divergence of development histories that can later be merged. This design promotes efficient experimentation and feature isolation, as branches do not store file snapshots themselves but leverage the existing commit graph. Git organizes references hierarchically to manage various pointers within the , stored primarily in the .git/[refs](/page/ReFS)/ directory. Local branches are referenced under refs/heads/, such as refs/heads/main, and represent the mutable tips of development lines within the local repository. Remote-tracking branches, stored in refs/remotes/, mirror the state of branches from remote repositories, like refs/remotes/origin/main, and are updated during fetch or pull operations to track external changes without altering local work. Notes references under refs/notes/ allow attachment of additional to existing objects, such as commits, for annotations without modifying the core history. For performance, Git packs multiple references into a single packed-refs file, reducing filesystem overhead in repositories with numerous branches and tags. These reference types collectively form a flexible for navigating and organizing the commit graph. The HEAD reference acts as a special pointer indicating the current position in the , typically a symbolic link to the active reference, such as ref: refs/heads/main. This allows Git to determine the for operations like committing, which advances the pointed to by HEAD. In a detached HEAD state, HEAD directly references a specific commit rather than a , enabling temporary work on historical or remote commits without affecting any ; new commits in this mode are not automatically attached to a and may become unreachable unless explicitly referenced, serving scenarios like inspecting or patching old . Tags in Git provide fixed references to specific points in history, distinct from mutable branches, and come in two primary forms: and annotated. tags are basic pointers to a commit, functioning similarly to branches but intended for immutable markers without additional data, created simply by naming a commit. Annotated tags, in contrast, are full Git objects containing like the tagger's name, email, date, and a message, and they support GPG signatures for verification of authenticity, making them suitable for releases or milestones. This distinction ensures tags for quick internal use while annotated tags offer verifiable, detailed snapshots. For navigation and debugging within the reference graph, Git provides tools like bisect and reflog to efficiently traverse and recover from the history of branches and commits. Git bisect employs a across the commit graph to pinpoint the introduction of a bug, starting from known good and bad commits—often branch tips—and iteratively checking out midpoints for testing, reducing the search space logarithmically even in large histories. The reflog maintains a local log of all updates to references, including HEAD movements and shifts, allowing users to and to previous states for lost work or unintended rewrites, with entries typically retained for 90 days by default. These mechanisms enhance reliability in complex branching workflows by providing structured paths through the otherwise opaque reference evolution.

Commands and Usage

Git commands are categorized into two primary types: and . commands provide high-level, user-friendly interfaces for common operations, such as git add, git commit, and git push, which abstract away the underlying complexities to facilitate everyday usage. In contrast, commands offer low-level access to Git's internals for scripting and advanced automation, exemplified by git hash-object, which computes object hashes directly without user-oriented output formatting. This distinction ensures that commands prioritize ease of use while commands enable precise control over Git's . The core Git workflow begins with repository initialization or . The git init command creates a new Git in the current by generating a .git subdirectory to store and , with no files tracked initially. For example, running git init in /home/user/my_project sets up the for subsequent operations like adding files. Alternatively, git clone <url> [directory] copies an existing remote , including its full , into a local working ; the optional parameter allows customizing the target folder name, defaulting to the 's name otherwise. An example is git clone https://github.com/libgit2/libgit2 mylibgit, which clones the into a folder named mylibgit. Once a repository is set up, users stage and commit changes using git add and git commit. The git add <file> command stages specified files or directories for the next commit, capturing their current state in the ; for instance, git add README prepares the README file for inclusion. The git commit command then records the staged changes as a , requiring a commit message via -m "message" for brevity; git commit -m "Initial commit" creates the snapshot with the provided description. The -a flag in git commit -a -m "message" automatically stages all tracked, modified files, streamlining the process for updates. To monitor the repository state, git status displays the and details, such as untracked or modified files; the short form git status -s provides a compact overview with symbols like M for modified and ?? for untracked. Inspecting history and differences is handled by git log and git diff. The git log command shows commit history in reverse chronological order, including SHA, author, date, and message; options like --oneline condense output to one line per commit, while --graph visualizes branch structure in ASCII art, as in git log --oneline --graph for a graphical overview. The git diff command compares changes, such as between the working tree and index (git diff), staged changes and the last commit (git diff --cached), or two commits (git diff <commit1> <commit2>); it outputs unified diff format by default, limited to specific paths with -- <path>. Branch management involves creating and switching branches with git branch and git checkout or git switch. The git branch <branch-name> command creates a new branch pointing to the current HEAD, without switching to it; for example, git branch iss53 establishes the . To switch branches, git checkout <branch-name> updates the working tree to match the specified branch, requiring a clean directory; git checkout -b <branch-name> combines creation and switching. As a modern alternative focused solely on branch switching, git switch <branch-name> achieves the same, with git switch -c <new-branch> for creating and switching; it handles local changes more safely via options like --discard-changes. Remote operations enable collaboration through git fetch, git pull, and git push. The git fetch <remote> command downloads objects and refs from the remote without merging, updating local tracking branches; for example, git fetch origin retrieves updates from the "origin" remote. The git pull <remote> <branch> command combines fetching with merging the remote branch into the current one, equivalent to git fetch followed by git merge; git pull origin master integrates changes from the remote master branch. For uploading changes, git push <remote> <branch> sends local commits to the remote; refspecs specify mappings in the format <src>:<dst>, where + allows non-fast-forward updates, as in git push origin master:refs/heads/qa/master to push the local master to a remote qa/master branch. Default refspecs can be configured in .git/config under the remote section for automated pushes. Git configuration is managed via git config, which sets variables at local, global, or system scopes. Essential settings include user.name for the commit author name and user.email for the email; git config --global user.name "John Doe" applies it user-wide. The core.autocrlf option handles line ending conversions, with true converting CRLF to LF on commit and vice versa on checkout to ensure cross-platform consistency; set via git config --global core.autocrlf true. Commands like git config list view all settings, and scopes are specified with --global for user-level or omitted for repository-specific.

Merging Strategies

Git employs several strategies to integrate changes from one branch into another, primarily through the git merge command, which combines histories while preserving the project's evolution. These strategies determine how commits are combined, whether a new merge commit is created, and how conflicts are managed. The default behavior favors simplicity and linearity when possible, but options allow for explicit control over the process to suit different workflows. A fast-forward merge occurs when the target can be advanced directly to the tip of the source without diverging changes, updating the pointer without creating a new commit. This results in a linear , as no additional merge commit is needed since the source 's commits are already descendants of the target. By default, Git performs a fast-forward merge if possible, but this can be disabled with the --no-ff option to force creation of a merge commit for better of integrations. When fast-forwarding is not possible—due to concurrent changes on both branches—Git uses a three-way merge, which relies on a common commit to reconcile differences between the two branch tips. This applies changes from both branches relative to the ancestor, producing a new merge commit with two parents that explicitly records the integration. The recursive , now implemented via the ort backend since Git 2.50.0, is the default for three-way merges and excels at handling complex cases like file renames and modifications across branches; it supports options such as ours or theirs to favor one side during conflicts. For merging more than two branches simultaneously, the octopus is used, which creates a single merge commit with multiple parents but refuses to proceed if manual resolution is required for complex overlaps. Merge conflicts arise when the same lines in a file are modified differently in both branches relative to the common ancestor, preventing automatic . Git marks these in the affected files using conflict markers: <<<<<<< for the start of the target branch's changes, ======= as the separator, and >>>>>>> for the source branch's changes. involves manually editing the file to retain the desired content, the changes with git add, and then committing to complete the merge. Tools like git mergetool can assist, but the process ensures deliberate human intervention for accuracy. To maintain a linear history instead of branchy merges, developers often use git rebase, which replays commits from the source branch onto the target, effectively rewriting as if the changes were made sequentially. Internally, rebase employs merge strategies like ort to apply each commit, stopping for conflicts that require manual resolution similar to merging—edit files, stage, and use git rebase --continue. This approach avoids merge commits but can complicate shared branches if not coordinated carefully. The --no-ff option in merges complements rebase by allowing explicit merge commits when linearity is not desired, such as in release branches. For selective integration without full branch merges, Git provides git cherry-pick, which applies the changes from specific commits to the current , creating new commits with equivalent patches. It uses the same merge strategies as git merge (e.g., via --strategy=recursive) and handles s by pausing with markers, requiring resolution before continuing with --continue. This is useful for porting fixes across branches. Submodules, treated as pointers to external repositories, are merged by fast-forwarding if one commit is a of the other; otherwise, they trigger a , prompting selection of a compatible commit to avoid breaking dependencies.

Implementations and Hosting

Official and Alternative Implementations

The official implementation of Git is a standalone, command-line tool primarily written in , offering high performance and full support for all core features such as , , branching, and merging. Junio C. Hamano assumed maintenance shortly after its inception in July 2005 and continues to lead development as of 2025. The project is hosted on the official website at git-scm.com, where , binaries, , and release notes are maintained, with the canonical repository located at git.kernel.org under the git.git project. Alternative implementations provide reimplementations or wrappers to extend Git's usability across different programming ecosystems while aiming to preserve compatibility with the official version's protocols and data formats. JGit, developed by the , is a lightweight, pure implementation that enables direct Git operations within JVM-based applications without relying on external processes, making it suitable for integration in Java tools and servers. Similarly, libgit2 offers a portable, pure C library implementation of Git's core methods, serving as a foundation for language bindings in environments like Go (via go-git) and (via git2-rs), allowing developers to embed Git functionality into custom applications with a focus on re-entrancy and ergonomics. Gitoxide (gix) is an idiomatic, pure reimplementation of Git, emphasizing correctness, performance, and safety; as of 2025, it supports a wide range of Git operations and aims to serve as a future-proof alternative for Rust-based applications. Partial implementations in scripting languages facilitate easier access for specific use cases but do not replicate the full feature set of the official Git. GitPython acts as a high-level wrapper around the Git , providing an object-oriented interface for tasks like manipulation, commit handling, and operations, which simplifies automation in Python scripts without requiring deep Git internals knowledge. In contrast, is a pure Python reimplementation of Git's file formats and protocols, enabling access and operations entirely in Python code, though it prioritizes core functionality over advanced optimizations present in the C-based original. These alternatives generally achieve protocol-level compatibility with Git repositories, allowing seamless , pushing, and pulling across implementations, but they may omit niche features such as complex scripting or certain performance-tuned internals to maintain portability. No major historical forks of the Git project have emerged, as development remains centralized; instead, contributions from the are integrated via patches to the git.git , ensuring a unified .

Git Servers and Hosting Services

Git servers enable the centralized storage, sharing, and collaboration on Git repositories, supporting remote operations such as pushing and fetching changes. Simple open-source setups often rely on built-in Git tools for basic sharing without requiring full-fledged software installations. For instance, the Git daemon provides a lightweight way to serve repositories over the native Git protocol on port 9418, ideal for unauthenticated, read-only access in trusted networks. This setup involves running git daemon on the server, exporting repositories via a --base-path configuration, and allowing clients to clone via git:// URLs, though it lacks built-in authentication and is not recommended for public internet exposure due to security risks. SSH-based access offers a more secure alternative for authenticated sharing, utilizing the protocol on port 22 to execute Git commands remotely. Server administrators configure this by ensuring SSH access for users, often using public key authentication via authorized_keys files, and placing bare repositories in a shared directory like /srv/git for users to push to via git@server:project.git. This method supports both read and write operations securely without additional daemons, making it suitable for small teams or internal use. For enhanced capabilities over HTTP or , tools like Gitweb—a script bundled with Git—provide a web interface to view repository contents, logs, and diffs without direct Git access. Similarly, cgit serves as a fast, C-based web frontend that supports repository , clone URLs via dumb HTTP , and feeds for commits, emphasizing low resource usage and caching for efficiency. Enterprise-grade open-source servers extend these basics with comprehensive features for self-hosting, including user management and . GitLab Community Edition (CE) is a popular on Rails-based platform that installs on a single or , offering built-in via LDAP, , or SAML, along with issue tracking and wiki support. It manages bare Git repositories while providing a web UI for operations, suitable for organizations seeking full control over their infrastructure. is a lightweight Go-based alternative designed for minimal resource footprints, enabling self-hosted Git hosting with , team collaboration, and package registry features in a single binary deployment. , a community-driven soft of , offers similar lightweight functionality with enhanced focus on democratic governance and sustainability, making it a popular choice for non-profit and open-source communities as of 2025. Both and Forgejo emphasize ease of setup on servers or containers, with Forgejo particularly favored for its independence from corporate influence. Hosted services, or "Git as a service," abstract server management entirely, providing scalable platforms with proprietary enhancements. , a proprietary platform launched in 2008, was acquired by in 2018 for $7.5 billion in stock, integrating deeply with for cloud-native workflows. It supports core Git operations alongside features like pull requests for and Actions for pipelines. .com, the offering from , mirrors its self-hosted CE with merge requests (equivalent to pull requests) for collaborative reviews and integrated via .gitlab-ci.yml configurations that automate builds, tests, and deployments. , owned by since 2010, focuses on Git and repositories with pull requests, Pipelines for , and seamless integration for project tracking. These services handle authentication, backups, and high availability, often with free tiers for small teams and paid plans for enterprises. Git supports multiple protocols for server interactions, balancing security, performance, and ease of use. The SSH protocol (port 22) encrypts transfers and authenticates via keys, supporting smart protocol features for efficient packfile negotiation. HTTP/ enables "dumb" access for simple file serving or "smart" access via / for full Git capabilities, commonly used with or for web-based pushes and pulls. The native Git protocol (port 9418) provides fast, unauthenticated transfers but requires a dedicated daemon and openings. For scalability, Git servers distinguish between bare repositories—shared directories without a working tree, created via git init --bare—and full servers with additional management layers. Bare repositories suffice for small-scale sharing, as they store only Git objects and references, avoiding checkout overhead. In large teams, replication enhances availability and load balancing; techniques like Git's git remote for such as git-multisite replicate repositories across nodes to distribute and prevent single points of failure. This approach supports horizontal scaling, where multiple servers sync via hooks or periodic fetches, ensuring consistent data for thousands of users without central bottlenecks.

User Interfaces and Tools

Command-Line Interface

Git's command-line interface (CLI) is structured around a core command, git, followed by subcommands that handle specific operations. These subcommands are categorized into high-level "" commands, designed for end-user interaction with user-friendly output, and low-level "" commands, intended for scripting and programmatic use with stable, machine-readable formats. For instance, git rev-parse is a plumbing command that parses revision specifications and outputs raw data, such as commit hashes, without additional formatting. Users can extend the CLI through aliases, defined using git config alias.<name> <command>, which allow shorthand for frequently used commands or combinations thereof. This configuration is stored in the Git files and can be set at repository, , or levels. Advanced features of the CLI include , which are scripts executed automatically at key points in Git's . The pre-commit hook runs before a commit is finalized, allowing of changes—for example, to enforce standards by rejecting commits with trailing whitespace. Similarly, the post-receive hook executes on the server after a push has updated references, commonly used for tasks like deploying code or sending notifications. These hooks reside in the .git/hooks directory and can be written in any executable script language. Submodules enable embedding one Git repository within another, managed via dedicated CLI commands. The git submodule add <repository-url> <path> command initializes and clones a submodule at the specified path, recording its and commit in the superproject's configuration. To synchronize submodules with the latest commits specified in the superproject, git submodule update --init --recursive fetches and checks out the appropriate versions, ensuring consistency across clones. For scripting, porcelain commands like git status or git log provide formatted output suitable for human-readable user scripts, while plumbing commands such as git rev-list or git cat-file offer precise, parseable results for automation. An example is git archive, a porcelain command that creates an (e.g., or ) of a object or commit, useful for exporting releases without including the full . Developers are encouraged to use plumbing commands for reliable scripting to avoid breakage from porcelain output changes. Customization options enhance CLI usability. The pager, controlled by the core.pager configuration (defaulting to less if available), paginates long outputs from commands like git log. Editor integration is handled via core.editor, which specifies the default editor for commit messages and other interactive prompts, such as vim or nano. Output formatting can be tailored with options like --pretty in git log or git show, allowing custom formats (e.g., --pretty=format:%h %s) to display commit hashes and subjects in a structured way. Common error handling in the CLI addresses issues like a "detached HEAD" state, which occurs when HEAD points directly to a commit rather than a , often after checking out a specific commit or tag. In this state, new commits are not attached to any branch and can be lost if not referenced; resolution involves creating a new branch with git checkout -b <new-branch> to reattach HEAD. Git provides warnings and status indicators to alert users, and commands like git status help diagnose the situation.

Graphical User Interfaces

Git offers a variety of graphical user interfaces (GUIs) that provide visual aids for tasks, such as viewing commit histories, changes, and managing , thereby lowering the barrier for users unfamiliar with command-line operations. These tools emphasize intuitive representations like branch diagrams and side-by-side diffs, while integrating seamlessly with workflows. Built-in and third-party options cater to different platforms and needs, from standalone applications to IDE-embedded features. Among the built-in GUIs distributed with Git, git-gui is a Tcl/Tk-based tool designed primarily for commit preparation and editing, enabling users to select and stage files visually, amend commit messages, and perform basic actions without commands. Complementing it, gitk functions as a that visualizes the , displays differences across revisions, and supports searching through , making it ideal for exploring project evolution. Third-party desktop GUIs extend these capabilities with enhanced visualizations and cross-platform support. GitKraken, available for Windows, macOS, and , features an interactive graph view of branches and commits, drag-and-drop staging, visual merge conflict resolution, and built-in AI-assisted commit messaging to streamline workflows. Sourcetree, from , provides a repository overview with file status indicators, interactive rebase tools, and tight integration for users, allowing graphical handling of pulls, pushes, and submodules. Tower, tailored for macOS (with Windows support), offers advanced functionalities like undo for Git operations, quick actions for common tasks, and submodule management, emphasizing a polished interface for professional developers. Integrations within integrated development environments (IDEs) bring Git GUIs directly into coding sessions. includes a native source control view for staging changes, creating , and resolving merges inline, with extensions enhancing graph visualizations. 's supports setup, switching, of code lines with commit details, and through a dedicated tool window. utilizes the EGit plugin for comprehensive Git operations, including cloning, tagging, and exploration within the IDE's perspective. embeds Git support natively, permitting management, commit authoring, and remote synchronization from the project navigator, optimized for development. These GUIs commonly incorporate features such as color-coded file status indicators, timeline views for recent activity, and one-click actions for diffs and merges to enhance . Drag-and-drop simplifies file selection, while branch graphs illustrate relationships and divergences clearly. However, GUIs may limit advanced scripting or batch operations available in the , as their focus remains on visual accessibility rather than extensibility. Web-based GUIs, often tied to hosting platforms, enable browser-driven interactions. Desktop, a cross-platform app, facilitates cloning repositories, committing changes, and managing pull requests with a simple interface geared toward GitHub workflows. GitLab's Web IDE allows direct file editing, commit creation, and merge request handling in the browser, supporting collaborative reviews without local installation.

Adoption and Extensions

Historical and Current Adoption

Git emerged as a system in 2005, initially created by to manage the 's source code after the withdrawal of proprietary tool . Its adoption began within the kernel community, where it quickly proved effective for handling large-scale, distributed development workflows. By 2007, Git had spread to other open-source ecosystems, including the community, where early adopters began using it for collaborative projects amid growing interest in distributed systems. The launch of in 2008 marked a pivotal acceleration in Git's open-source adoption, providing a user-friendly platform for hosting and collaborating on repositories, which drew in developers from various communities and facilitated easier sharing of code. Between 2008 and 2012, widespread migrations from centralized systems like (SVN) and (CVS) occurred, driven by Git's advantages in offline work, branching efficiency, and performance for large codebases. This period saw Git transition from a niche tool to a preferred option for new projects, particularly in agile and open-source environments. As of 2025, Git has become the industry standard for , with 93% of developers reporting its use according to the 2023 Stack Overflow Developer Survey, remaining the dominant tool in subsequent years. It dominates in enterprise settings, where over 90% of Fortune 100 companies integrate Git through platforms like for scalable, secure code management. alone hosts more than 630 million repositories, underscoring Git's scale in facilitating global collaboration, with over 121 million new repositories added in 2025. The distributed model of Git has fueled its enterprise rise since the , enabling resilient, high-velocity development in distributed teams without reliance on central servers. Notable case studies illustrate Git's broad impact. The Android Open Source Project (AOSP) relies on Git for managing its vast , using it alongside the Repo tool to orchestrate multiple repositories for Android's development and contributions. completed a comprehensive transition to Git across its engineering teams by 2017, adopting it for projects like Windows and to handle massive repositories through innovations like the Git Virtual File System. Apple integrated native Git support into starting with version 4 in 2011, allowing developers to perform commits, branching, and remote synchronization directly within the , which has become standard for and macOS app development. Today, Git serves as the default for the majority of new software projects, embedding itself in pipelines and worldwide.

Extensions and Integrations

Git Large File Storage (Git LFS) is an open-source extension introduced in 2015 that enables efficient versioning of large files, such as audio, video, datasets, and , by storing references to files in the Git while keeping the actual content in a separate . Unlike standard Git, which struggles with large files due to its model optimized for text, Git LFS replaces these files with pointer files containing metadata like file size and hash, fetching the full content only when needed during checkout. This extension integrates seamlessly with Git workflows, requiring users to install the Git LFS client and track specific file types via commands like git lfs track "*.psd". Git Annex extends Git's capabilities for managing large files and data sets without storing their contents directly in the repository, focusing instead on tracking file locations across distributed storage systems. Developed in , it supports syncing, backing up, and archiving data across remotes like or SSH servers, using symlinks or direct mode to access files offline or online. For instance, it allows adding large datasets with git annex add and syncing them via git annex sync, making it suitable for scientific and data-intensive projects where full file contents need not bloat the Git history. Git integrates with continuous integration and continuous delivery (CI/CD) pipelines to automate workflows triggered by repository events like commits or pull requests. Jenkins, an open-source automation server, uses its Git plugin to poll repositories, fetch changes, and execute builds, supporting operations such as checkout, merge, and push. GitHub Actions provides native CI/CD within GitHub repositories, allowing YAML-defined workflows to build, test, and deploy code directly from Git events, with runners on virtual machines or self-hosted environments. Similarly, GitLab CI uses .gitlab-ci.yml files to define pipelines that run jobs on shared or dedicated runners, integrating Git operations like cloning and branching for automated testing and deployment. For issue tracking, Git connects with tools like and Issues to link development activity with project management. Atlassian's integration allows to sync with repositories, displaying branches, commits, pull requests, and deployments in Jira issues for contextual visibility. Issues, built into the platform, natively ties to Git repositories, enabling references between issues and code changes via mentions like "Fixes #123" in commit messages, which automatically closes linked issues upon merge. Git supports alternative protocols beyond its core transports, including email-based patch workflows for collaboration without direct repository access. The git format-patch command generates a series of patch files from commits, formatted as Unix mbox messages with commit metadata and diffs, while git send-email mails these patches to recipients or mailing lists, preserving threading via In-Reply-To headers. This method, rooted in open-source traditions, facilitates review and application of changes with git am, though it requires SMTP configuration for sending. Git can also operate over HTTP in "dumb" mode, serving repositories as static files via WebDAV-compatible servers, enabling basic clone and fetch operations in environments lacking smart protocol support, albeit with limitations on push and efficiency. Modern Git features enhance scalability for large repositories. Partial clones, introduced in Git 2.19 in 2018, allow fetching only necessary objects during clone or fetch using filters like --filter=blob:limit=10m to exclude large blobs, reducing initial download sizes and enabling on-demand retrieval of missing objects later. Multi-pack indexes (MIDX), available since Git 2.20, consolidate indexes from multiple packfiles into a single sorted list of objects with offsets, improving lookup performance in repositories with many packs by enabling O(log n) searches across them. Community-developed tools extend Git's branching and visualization capabilities. Git Flow, a branching model proposed in 2010, structures development around long-lived branches like main, develop, feature/, release/, and hotfix/ to manage releases and features systematically, implemented via extensions that provide high-level commands like git flow init and git flow feature start. GitKraken, a cross-platform Git client, integrates with services like , , and to visualize repositories, perform operations, and sync issues or pull requests directly within its interface, streamlining workflows for teams.

Practices and Security

Naming Conventions and Best Practices

Effective naming conventions in Git promote clarity, collaboration, and maintainability across teams. For commit messages, the official Git recommends starting with a concise line limited to 50 characters or fewer, summarizing the change, followed by a blank line and a detailed body explaining the motivation and context. This structure facilitates quick scanning of history via tools like git log. Additionally, the Conventional Commits specification, a widely adopted standard, structures messages as <type>[optional scope]: <description>, where types include feat for new features, fix for bug fixes, and docs for changes, enabling automated changelog generation and semantic versioning. Tools such as commitlint enforce this format in pipelines to ensure consistency. Branch naming conventions typically use descriptive prefixes to categorize purpose, such as feature/ for new developments, bugfix/ for corrections, hotfix/ for urgent production issues, and release/ for version preparations, as outlined in Bitbucket's branching model guidelines. This approach groups related branches and simplifies navigation in large repositories. For releases, semantic versioning tags like v1.2.3 are applied using git tag -a v1.2.3 -m "Release 1.2.3", following the MAJOR.MINOR.PATCH format to indicate compatibility-breaking changes, new features, or fixes, respectively. Key best practices include creating commits that represent single, logical units of change to ease and reversibility, as emphasized in Git tutorials for tracking issues with minimal disruption. Developers should push changes frequently to shared repositories to enable early and feedback, particularly in branch-based workflows, while avoiding force pushes (git push --force) on shared branches to prevent overwriting collaborators' work—protected branches in hosting services like enforce this by restricting such operations. To exclude temporary or sensitive files, maintain a .gitignore file at the repository root, listing patterns like *.log or node_modules/, and commit it early to avoid accidental tracking of irrelevant data. Workflow models provide structured approaches to these conventions. GitHub Flow is a simple, branch-per-feature model: branch from the main branch, commit changes, push the branch, open a pull request for review, and merge back after approval, ideal for environments. GitLab Flow extends this by incorporating environment-specific branches like production and staging for deployment testing, alongside feature branches, supporting multi-environment releases without complex long-lived branches. Repository hygiene ensures performance and efficiency. Run git gc periodically or enable automatic garbage collection via git config gc.auto 1 to prune unreachable objects, compress files, and pack references, reducing size and speeding up operations. Enabling the rerere (reuse recorded resolution) feature with git config rerere.enabled true caches manual merge resolutions for in future similar conflicts, streamlining repeated integrations in maintenance-heavy projects.

Security Vulnerabilities and Mitigations

Git has faced several security vulnerabilities related to its core hashing mechanisms and submodule handling, prompting ongoing improvements to enhance repository integrity and prevent unauthorized code execution. One prominent issue was the SHA-1 collision vulnerability demonstrated by the SHAttered attack in February 2017, which allowed attackers to create two different files with identical hashes, potentially enabling malicious alterations to Git objects without detection. In response, Git version 2.13.0 introduced a hardened implementation to detect such collisions, but full mitigation required transitioning to a stronger . Git 2.29, released in October 2020, added experimental support for SHA-256 hashing, allowing repositories to use the more secure 256-bit algorithm for object naming while maintaining compatibility with via bidirectional mapping. This transition improves cryptographic security by resisting collision attacks and supporting robust signatures for long-term repository trustworthiness. Another , CVE-2018-17456, involved remote execution risks during recursive git [clone](/page/Clone) operations on repositories with submodules. Specifically, if a .gitmodules file contained a field starting with a (-), Git before versions 2.14.5, 2.15.3, 2.16.5, 2.17.2, 2.18.1, and 2.19.1 could misinterpret it as a command-line option, leading to . This flaw, rated critical with a CVSS score of 9.8, was patched in those releases by ignoring such malformed and enhancing submodule validation. Supply chain risks in Git arise from malicious submodules and hooks, where attackers can embed harmful code in external repositories or scripts that execute automatically during cloning or checkout. Submodules pointing to untrusted sources may introduce vulnerabilities or backdoors, while client-side hooks in .git/hooks can run arbitrary scripts post-clone if not sanitized. For instance, a crafted repository could propagate malicious hooks through submodules, enabling code execution on unsuspecting users' systems. To mitigate these threats, Git supports GPG signing of commits via the git commit -S option, which appends a cryptographic to verify authorship and , configurable globally with commit.gpgsign=true. Administrators can implement server-side hooks for additional validation, such as scanning for malicious content before accepting pushes. Using secure protocols like for transfers is recommended over unencrypted HTTP, as it encrypts via TLS, preventing or tampering during clone, fetch, or push operations. For submodules, pinning to specific commits (e.g., via SHA hashes in .gitmodules) ensures fixed, verifiable states rather than dynamic branches, reducing risks from upstream changes. As of 2025, Git continues to address protocol weaknesses through regular security audits and patches; for example, in July 2025, the project released updates fixing seven vulnerabilities, including remote code execution via altered paths in hooks. Notably, CVE-2025-48384 has been actively exploited, leading to its inclusion in the U.S. Cybersecurity and Infrastructure Security Agency's (CISA) Known Exploited Vulnerabilities catalog on August 25, 2025, requiring federal agencies to apply mitigations by September 15, 2025. Integration with tools like Dependabot helps detect and alert on issues by scanning dependencies for known vulnerabilities during workflows.

Trademark and Licensing

The core Git software is released under the GNU General Public License version 2.0 (GPLv2), a license that grants users the freedom to run, study, share, and modify the program, provided that any derivative works are distributed under the same or a compatible license. This licensing choice ensures that Git remains free and , fostering widespread adoption and community contributions while protecting against proprietary enclosures of the core codebase. The "Git" and its associated logo are owned by the (SFC), a that serves as the corporate home for the Git Project since Git joined as a member project in 2010. The SFC holds U.S. Trademark Registration No. 4680534 for "Git" in connection with computer software for . The Git policy permits of the marks without prior permission in contexts such as factual references to the unmodified Git software, identifying Git as a component in products, or describing derivatives and interoperable tools (e.g., "[Product Name] supports Git" or "built on Git"). However, uses that could confuse consumers about origin or endorsement are prohibited, including creating portmanteaus like "GitPro" for unrelated products, implying official affiliation without approval, or using the marks in merchandising. For approved uses or inquiries, contact is directed to [email protected], with no fees required but donations encouraged to support the project. Forks and derivative works of Git must adhere to the GPLv2 terms, meaning modifications cannot be relicensed under incompatible terms and must provide source code to recipients. For instance, platforms like , which provide hosted Git repository services, comply by using compatible implementations such as libgit2 (GPLv2 with a linking exception) for their backend, allowing proprietary service layers while respecting the core license for distributed Git instances. Git's development is not encumbered by known blocking , with initial contributions from creator and subsequent community inputs provided under the open terms of the GPLv2, which implicitly grants necessary through its distribution model. While the core remains strictly , some extensions and integrations—such as editions of Git hosting tools—employ dual-licensing or add-ons to enable commercial offerings, though these do not affect the foundational GPLv2-licensed codebase.

Standardization Efforts

Git's standardization efforts are primarily community-driven, lacking endorsement from formal bodies like the ISO, but emphasizing technical documentation, protocol enhancements, and interoperability to ensure broad compatibility across tools and implementations. The core Git project maintains detailed specifications for its internal formats and wire protocols, enabling third-party developers to build compatible systems without proprietary barriers. A key milestone was the introduction of Git protocol version 2 in Git 2.18 in 2018, which addressed limitations in earlier versions (v0 and v1) by unifying multiple commands under a single service, relocating capabilities to a dedicated extensible section, and omitting reference advertisements unless explicitly requested via ls-refs. These changes enhance efficiency by reducing unnecessary data transfer—such as enabling server-side reference filtering—and improve security by limiting the exposure of repository references to authorized clients only, mitigating potential information leakage in untrusted environments. Protocol v2 also supports stateless operation over HTTP, facilitating better integration with web infrastructures while maintaining backward compatibility with v1. Interoperability is advanced through libraries like libgit2, a portable C implementation of Git's core methods provided as a linkable library with bindings for languages such as (pygit2), .NET (LibGit2Sharp), and Go (git2go), allowing developers to embed Git functionality in diverse applications without relying on the . Additionally, the hg-git extension enables seamless compatibility between and Git by converting commits and changesets losslessly, permitting Mercurial users to push to and pull from Git repositories as if native. While no formal ISO or equivalent governs Git, its packfile format—the mechanism for efficiently storing and transferring objects—is comprehensively documented in the official Git technical specifications, supporting versions 2 and with details on headers, deltified objects, and structures. For network transports, Git's HTTP-based protocol is outlined in the project's documentation, though no dedicated IETF standardizes it; related IETF RFCs focus on using Git and for collaborative document management in standards development, such as configuring repositories for working groups. Community-driven standardization occurs through events like the annual Git Merge conference, where contributors discuss protocol evolution, extensibility, and best practices in roundtable-style sessions to align on compatibility goals. Git releases incorporate rigorous compatibility testing via an extensive and integration test suite, ensuring backward compatibility with prior versions and across diverse platforms, with tests covering object formats, network protocols, and edge cases. Looking toward 2025 and beyond, ongoing efforts include transitioning to as the default object —replacing the vulnerable —with preparations in Git 2.52 (released November 17, 2025) enabling further internal support and full adoption planned for Git 3.0 in 2026 to bolster cryptographic security against collision attacks. Git is also integrating with emerging standards for data-intensive workflows, such as those in via tools like DVC (Data Version Control), which extends Git's branching and versioning to datasets and models while maintaining repository compatibility.

References

  1. [1]
    Git
    Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.Reference · Install · Book · Git-config Documentation
  2. [2]
    git Documentation - Git
    Git is a fast, scalable, distributed revision control system with a rich command set, providing both high-level and full access to internals.User manual · Git-commit[1] · Git-help[1] · Git-config[1]
  3. [3]
    About Git - GitHub Docs
    About version control and Git. A version control system, or VCS, tracks the history of changes as people and teams collaborate on projects together.
  4. [4]
    A Git Origin Story | Linux Journal
    Jul 27, 2018 · A look at Linux kernel developers' various revision control solutions through the years, Linus Torvalds' decision to use BitKeeper and the ...<|control11|><|separator|>
  5. [5]
    Journey through Git's 20-year history - GitLab
    Apr 14, 2025 · Linus never started Git out of love for version control systems, but because there was a need to replace BitKeeper for Linux kernel development.
  6. [6]
    Git turns 20: A Q&A with Linus Torvalds - The GitHub Blog
    Apr 7, 2025 · Exactly twenty years ago, on April 7, 2005, Linus Torvalds made the very first commit to a new version control system called Git. Torvalds ...
  7. [7]
    BitKeeper, Linux, and licensing disputes: How Linus wrote Git in 14 ...
    May 22, 2024 · While Linus himself held BitKeeper in high regard, his decision to use the tool internally for Linux in 2002 led to massive flame wars on the ...Missing: origins | Show results with:origins
  8. [8]
    Git 1.0.0 released - LWN.net
    Dec 21, 2005 · At least, I can compile git (version: current HEAD) here under current cygwin. Git 1.0.0 released. Posted Feb 23, 2006 19:21 UTC (Thu) by ...
  9. [9]
    Celebrating 17 years of Git - GitLab
    Apr 7, 2022 · Torvalds claimed to have named Linux after himself, and he said Git (British slang for “jerk”) was no different.
  10. [10]
    The History of Git: The Road to Domination - Welcome to the Jungle
    Feb 4, 2020 · In 2005, Linus Torvalds urgently needed a new version control system to maintain the development of the Linux Kernel. So he went offline for a week, wrote a ...<|separator|>
  11. [11]
    How did Git get its name? - Initial Commit
    May 10, 2020 · contemptible and despicable. simple. Take your pick from the dictionary of slang. - "global information tracker": you're in a good mood, and it ...Missing: backronym | Show results with:backronym
  12. [12]
    Git - A Short History of Git
    ### Summary of Git's Early History
  13. [13]
    Celebrating 15 years of Git: An interview with Git maintainer Junio ...
    Apr 7, 2020 · In celebration of Git's 15th anniversary, GitHub's Jeff King (@peff) interviewed Git's maintainer Junio Hamano about Git's 15 years and what's ...
  14. [14]
    GIT 1.5.0 - LWN.net
    Feb 13, 2007 · As of git v1.5.0 there are some optional features that changes the repository to allow data to be stored and transferred more efficiently.
  15. [15]
    Junio C Hamano: [ANNOUNCE] GIT 1.6.0 - LKML
    The latest feature release GIT 1.6.0 is available at the usual places: http://www.kernel.org/pub/software/scm/git/ git-1.6.0.tar.
  16. [16]
    Git 2.0 features better defaults and a kinder learning curve - InfoWorld
    May 29, 2014 · Improved defaults make the open source code sharing and version control system much easier to use for existing users and newbies alike.
  17. [17]
    Git - Branches in a Nutshell
    ### Summary of Git Branches as Lightweight Pointers
  18. [18]
    Git - Git References
    ### Summary of Git References
  19. [19]
    git-checkout Documentation - Git
    ... HEAD now refers directly to commit b . This is known as being in detached HEAD state. It means simply that HEAD refers to a specific commit, as opposed to ...Checkout-index · 2.0.5 2014-12-17 · 2.10.5 2017-09-22 · 2.14.6 2019-12-06
  20. [20]
    Tagging - Git
    Git tagging marks important points in history, often for releases. There are two types: lightweight (like a branch) and annotated (full object with info).
  21. [21]
    Git - git-bisect Documentation
    ### Summary of Git Bisect for Navigation and Debugging in the Reference Graph
  22. [22]
    Git - Rewriting History
    ### Summary of Reflog in Git Tools - Rewriting History
  23. [23]
    git-reflog Documentation - Git
    `git-reflog` manages reflog information, which records when branch tips were updated in the local repository, useful to specify old values of references.2.39.0 2022-12-12 · 2.6.7 2017-05-05 · 2.0.5 2014-12-17 · 2.35.0 2022-01-24
  24. [24]
    10.1 Git Internals - Plumbing and Porcelain
    These commands are generally referred to as Git's “plumbing” commands, while the more user-friendly commands are called “porcelain” commands.Missing: 2007 | Show results with:2007
  25. [25]
    Git - Getting a Git Repository
    ### Summary: Cloning a Git Repository
  26. [26]
    Git - Recording Changes to the Repository
    ### Summary of Git Commands from Git Basics - Recording Changes to the Repository
  27. [27]
    git-log Documentation - Git
    origin..HEAD specifies all the commits reachable from the current commit (i.e. HEAD ), but not from origin .Git-rev-list[1] · 2.17.0 2018-04-02 · 2.13.7 2018-05-22 · 2.19.2 2018-11-21
  28. [28]
    Git - git-diff Documentation
    ### Summary of `git diff` Basic Usage and Syntax
  29. [29]
    Basic Branching and Merging - Git
    Let's go through a simple example of branching and merging with a workflow that you might use in the real world. You'll follow these steps.
  30. [30]
    Git - git-switch Documentation
    ### Summary of `git switch` as an Alternative to `git checkout` for Switching Branches
  31. [31]
    Git - Working with Remotes
    ### Summary of Git Commands for Working with Remotes
  32. [32]
    Git - The Refspec
    ### Summary of Refspecs in Git (Especially with `git push`)
  33. [33]
    git-config Documentation - Git
    If a partial clone filter is provided (see --filter in git-rev-list[1] ... This used to be the default, but not since Git 2.0 ( simple is the new default).Git-worktree[1] · 2.1.4 2014-12-17 · Safe.directory · 2.40.0 2023-03-12Missing: smarter | Show results with:smarter<|separator|>
  34. [34]
    git-merge Documentation - Git
    The HEAD pointer stays the same. · The MERGE_HEAD ref is set to point to the other branch head. · Paths that merged cleanly are updated both in the index file and ...Git-mergetool[1] · Merge-base · 2.38.0 2022-10-02 · 2.0.5 2014-12-17
  35. [35]
    merge-strategies Documentation - Git
    The merge mechanism ( git merge and git pull commands) allows the backend merge strategies to be chosen with -s option.2.16.6 2019-12-06 · 2.14.6 2019-12-06 · 2.17.0 2018-04-02 · 2.25.0 2020-01-13
  36. [36]
    git-rebase Documentation - Git
    Using merging strategies to rebase (default). Note that a rebase merge works by replaying each commit from the working branch on top of the <upstream> ...2.2.3 2015-09-04 · 2.18.0 2018-06-21 · 2.44.0 2024-02-23 · 2.0.5 2014-12-17
  37. [37]
    git-cherry-pick Documentation - Git
    The current branch and HEAD pointer stay at the last commit successfully made. The CHERRY_PICK_HEAD ref is set to point at the commit that introduced the ...Gitrevisions[7] · 2.0.5 2014-12-17 · 2.22.0 2019-06-07 · 2.23.0 2019-08-16
  38. [38]
    Git Daemon
    We'll set up a daemon serving repositories using the “Git” protocol. This is a common choice for fast, unauthenticated access to your Git data.
  39. [39]
    Setting Up the Server - Git
    Let's walk through setting up SSH access on the server side. In this example, you'll use the authorized_keys method for authenticating your users.
  40. [40]
    GitWeb - Git
    A simple web-based visualizer. Git comes with a CGI script called GitWeb that is sometimes used for this.
  41. [41]
    cgit - A hyperfast web frontend for git repositories written in C.
    Features · basic repository browsing (logs, diffs, trees...) · caching of generated HTML · cloneable URLs (implements dumb HTTP transport) · commit feeds (atom ...
  42. [42]
    Download and install GitLab
    Try GitLab for free · GitLab.com Trial · We host, no technical setup required. · GitLab Self-Managed Trial · You host, install GitLab on your own setup.GitLab Helm chart · GitLab Environment Toolkit · Update · Partners
  43. [43]
    Gitea Official Website
    Gitea enables the creation and management of repositories based on Git. It also makes code review incredibly easy and convenient, enhancing code quality for ...Download Now · Gitea · Gitea Cloud · Gitea Enterprise
  44. [44]
    Microsoft to acquire GitHub for $7.5 billion - Source
    Jun 4, 2018 · Under the terms of the agreement, Microsoft will acquire GitHub for $7.5 billion in Microsoft stock. Subject to customary closing conditions ...
  45. [45]
    Atlassian Bitbucket: Code & CI/CD on the Atlassian Platform
    Bitbucket Cloud supercharges code and CI/CD with AI that knows your team, code base, feature requirements, and more as part of the Atlassian Cloud platform, ...Bitbucket Pricing · Bitbucket Pipelines · Bitbucket code review · Cloud Security
  46. [46]
    Getting Git on a Server
    a repository that doesn't contain a working ...Missing: open- | Show results with:open-
  47. [47]
    git-rev-parse Documentation - Git
    Many Git porcelainish commands take a mixture of flags (i.e. parameters that begin with a dash -) and parameters meant for the underlying git rev-list ...2.43.0 2023-11-20 · 2.44.0 2024-02-23 · 2.29.0 2020-10-19 · 2.45.0 2024-04-29<|separator|>
  48. [48]
    githooks Documentation - Git
    Hooks are programs you can place in a hooks directory to trigger actions at certain points in git's execution.2.13.7 2018-05-22 · 2.15.4 2019-12-06 · 2.19.0 2018-09-10 · 2.27.0 2020-06-01
  49. [49]
    git-submodule Documentation - Git
    You can then customize the submodule clone URLs in . git/config for your local setup and proceed to git submodule update ; you can also just use git submodule ...Submodules · 2.44.0 2024-02-23 · 2.0.5 2014-12-17 · 2.18.0 2018-06-21
  50. [50]
    Submodules - Git
    If you forget the --rebase or --merge , Git will just update the submodule to whatever is on the server and reset your project to a detached HEAD state.
  51. [51]
    8.1 Customizing Git - Git Configuration
    In this chapter, we'll see how you can make Git operate in a more customized fashion, by introducing several important configuration settings and the hooks ...
  52. [52]
    git-status Documentation - Git
    When a merge conflict has occurred and has not yet been resolved, X and Y show the state introduced by each head of the merge, relative to the common ancestor.2.40.0 2023-03-12 · 2.44.0 2024-02-23 · 2.0.5 2014-12-17 · 2.11.4 2017-09-22
  53. [53]
    A1.1 Appendix A: Git in Other Environments - Graphical Interfaces
    gitk and git-gui are examples of task-oriented tools. Each of them is tailored for a specific purpose (viewing history and creating commits, respectively), and ...
  54. [54]
    git-gui Documentation - Git
    git gui focuses on allowing users to make changes to their repository by making new commits, amending existing ones, creating branches, performing local merges, ...
  55. [55]
    gitk Documentation - Git
    Displays changes in a repository or a selected set of commits. This includes visualizing the commit graph, showing information related to each commit, and the ...
  56. [56]
    GitKraken Desktop | Free Git GUI + Terminal | Mac, Windows, Linux
    GitKraken Desktop offers built-in AI capabilities to fast track your workflow—no extra tools, no switching interfaces. Compose Commits with AI. Skip the rebase ...
  57. [57]
    Sourcetree | Free Git GUI for Mac and Windows
    Sourcetree is a free Git client and GUI for Windows and Mac, simplifying Git interactions and placing Git power in an easy-to-use interface.
  58. [58]
    Feature Overview | Tower Git Client
    The most powerful Git client comes with countless features, stunning performance and a well thought-out design.
  59. [59]
    Using Git source control in VS Code
    Using Git source control in VS Code. Visual Studio Code has integrated source control management (SCM) and includes Git support out-of-the-box.Introduction to Git · Working with GitHub · Source Control FAQ
  60. [60]
    Git | IntelliJ IDEA Documentation - JetBrains
    Set up a Git repository, clone a repository or put your local project under Git version control, manage Git branches, create, rename, check out, and compare ...Set up a Git repository · Sync with a remote Git... · Manage Git branches
  61. [61]
    Configuring your Xcode project to use source control
    Set up your Xcode project to use Git by creating a new local repository, or by connecting it to an existing remote repository. For more information on source ...
  62. [62]
    Web IDE - GitLab Docs
    The Web IDE is an advanced editor where you can edit multiple files, stage changes, and create commits directly in the GitLab UI.Web Editor · Workspaces · Configure VS Code Extension...
  63. [63]
    Ten Lessons from GitHub's First Year - Tom Preston-Werner
    Mar 29, 2011 · When Chris and I started working on GitHub in late 2007, Git was largely unknown as a version control system. ... Git adoption in the Ruby ...
  64. [64]
    History of Git - GeeksforGeeks
    Sep 29, 2025 · December 2005: Git 1.0 released, ready for broader adoption beyond the Linux kernel. 2008: GitHub launched, providing a web-based interface for ...
  65. [65]
    Git Convert: Migrate from SVN to Git | Atlassian Git Tutorial
    Convert is a key step in migrating from SVN to Git. Convert allows for importing contents of SVN repository into a new Git repository. Learn more here.
  66. [66]
    RhodeCode › Blog: Version Control Systems Popularity in 2025
    Mar 18, 2025 · In 2016, 87.1% of developers preferred Git, and by 2025, its usage had risen to 93.87%. The Stack Overflow Developer Survey ranks version ...
  67. [67]
    GitHub Statistics 2025: Data That Changes Dev Work - SQ Magazine
    Oct 3, 2025 · How many developers are using GitHub as of 2025? Over 150 million developers. What percent of Fortune 100 companies use GitHub? More than 90 %.
  68. [68]
    Octoverse: A new developer joins GitHub every second as AI leads ...
    Oct 28, 2025 · Key numbers. 180M+ developers are now on GitHub; 630M total repositories with +121M new repositories in 2025 marking our biggest year yet; +58M ...
  69. [69]
    Set up for AOSP development (9.0 or later)
    Oct 9, 2025 · Git is a free and open source distributed version control system. Android uses Git for local operations such as branching, commits, diffs, and ...
  70. [70]
    Scaling Git (and some back story) - Brian Harry's Blog
    Feb 3, 2017 · At this point virtually every team at Microsoft has made this transition and all of our engineering work is being managed in Team Services ...
  71. [71]
    Xcode 4 released with git integration - The GitHub Blog
    Mar 9, 2011 · Today Apple released Xcode 4. We're pretty excited over here because Xcode 4 is the first Xcode release to support git natively.<|separator|>
  72. [72]
    Git Large File Storage | Git Large File Storage (LFS) replaces large ...
    An open source Git extension for versioning large files​​ Git Large File Storage (LFS) replaces large files such as audio samples, videos, datasets, and graphics ...
  73. [73]
    Managing large files with Git LFS - The GitHub Blog
    Oct 14, 2015 · If you use GitHub Enterprise, we are happy to share the news that support for Git LFS is now officially available in our version 2.4 release. In ...
  74. [74]
    Configuring Git Large File Storage - GitHub Docs
    To associate a file type in your repository with Git LFS, enter git lfs track followed by the name of the file extension you want to automatically upload to ...
  75. [75]
    git-annex
    git-annex allows managing large files with git, without storing the file contents in git. It can sync, backup, and archive your data, offline and online.Walkthrough · Not · Install · How it works
  76. [76]
    walkthrough - git-annex - Branchable
    A walkthrough of some of the basic features of git-annex, using the command line. If you don't want to use the command line, see quickstart instead.using ssh remotes · using special remotes · quiet please: When git-annex...
  77. [77]
    NAME - git-annex
    Mar 27, 2023 · git-annex allows managing files with git, without checking the file contents into git. While that may seem paradoxical, it is useful when dealing with files ...
  78. [78]
    Git - Jenkins Plugins
    Oct 8, 2025 · The git plugin provides fundamental git operations for Jenkins projects. It can poll, fetch, checkout, branch, list, merge, tag, and push repositories.
  79. [79]
    Get started with GitLab CI/CD
    Get started with GitLab CI/CD · Step 1: Configure your pipeline · Step 2: Find or create runners · Step 3: Use CI/CD variables and expressions · Step 4: Use CI/CD ...
  80. [80]
    Integrate Jira with GitHub - Atlassian Support
    Link your team's GitHub development activity to Jira work items, view branches, commits, pull requests, builds, and deployments in the context of your work.Connect GitHub Cloud to Jira · Link GitHub development...
  81. [81]
    git-format-patch Documentation - Git
    Prepare each non-merge commit with its "patch" in one "message" per commit, formatted to resemble a UNIX mailbox.Missing: protocols WebDAV
  82. [82]
    git-send-email Documentation - Git
    Takes the patches given on the command line and emails them out. Patches can be specified as files, directories (which will send all files in the directory), ...Missing: protocols WebDAV
  83. [83]
    Git - The Protocols
    ### Summary of Git Protocols from https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols
  84. [84]
    Highlights from Git 2.19 - The GitHub Blog
    Sep 10, 2018 · There's ongoing work to allow “partial” clones ... Read the full release notes for 2.19, or find the release notes for previous versions in the ...
  85. [85]
    multi-pack-index Documentation - Git
    The multi-pack-index (MIDX for short) stores a list of objects and their offsets into multiple packfiles. It contains: A list of packfile names. A sorted list ...
  86. [86]
    A successful Git branching model - nvie.com
    Jan 5, 2010 · In this post I present a Git branching strategy for developing and releasing software as I've used it in many of my projects, and which has ...
  87. [87]
    nvie/gitflow: Git extensions to provide high-level repository ... - GitHub
    Oct 14, 2025 · A collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.
  88. [88]
    GitHub Integrations | Using GitHub and GitKraken
    GitKraken's deep integration with GitHub creates a powerful, streamlined Git workflow. From the moment you sign in using GitHub credentials, working with your ...
  89. [89]
    GitKraken Desktop Remote Repo & Issue Tracker Integrations
    Use GitKraken Desktop to integrate with remote services and issue trackers. Integrate with GitHub, GitLab, Azure DevOps, Jira, GitLab Issues, and more!
  90. [90]
    SHAttered
    Is Hardened SHA-1 vulnerable? No, SHA-1 hardened with counter-cryptanalysis (see 'how do I detect the attack') will detect cryptanalytic collision attacks. In ...
  91. [91]
    hash-function-transition Documentation - Git
    On 23 February 2017 the SHAttered attack (https://shattered.io) demonstrated a practical SHA-1 hash collision. Git v2.13.0 and later subsequently moved to a ...Background · Choice of Hash · Overview · Detailed Design
  92. [92]
    Highlights from Git 2.29 - The GitHub Blog
    Oct 19, 2020 · Git 2.29 includes experimental support for writing your repository's objects using a SHA-256 hash of their contents, instead of using SHA-1.Missing: mitigation | Show results with:mitigation
  93. [93]
    NVD - CVE-2018-17456
    ### CVE-2018-17456 Summary
  94. [94]
    Git Submodule Vulnerability Announced - The GitHub Blog
    Oct 5, 2018 · The Git project has disclosed CVE-2018-17456, a vulnerability in Git that can cause arbitrary code to be executed when a user clones a malicious repository.Missing: risks hooks pinning
  95. [95]
    Prevent Secrets with Git Hooks - Orca Security
    Sep 4, 2025 · Git hooks help shift security left by catching secrets at the earliest possible stage, before they ever leave a developer's machine or reach a ...Missing: malicious | Show results with:malicious
  96. [96]
    CrowdStrike Falcon Blocks Git Vulnerability CVE-2025-48384
    Oct 16, 2025 · Git then automatically executes this malicious hook script as part of the normal submodule checkout process, resulting in arbitrary code ...
  97. [97]
    git-commit Documentation - Git
    Create a commit with an empty commit message without using plumbing commands like git-commit-tree[1]. Like --allow-empty , this command is primarily for use by ...2.11.4 2017-09-22 · 2.13.7 2018-05-22 · 2.16.6 2019-12-06 · 2.27.0 2020-06-01
  98. [98]
    Git security vulnerabilities announced - The GitHub Blog
    Jul 8, 2025 · Today, the Git project released new versions to address seven security vulnerabilities that affect all prior versions of Git.
  99. [99]
    Free and Open Source - Git
    Free and Open Source. Git is released under the GNU General Public License version 2.0, which is an open source license. The Git project chose to use GPLv2 ...
  100. [100]
    GNU General Public License, version 2
    The GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.GNU GPL FAQ · Violations of the GNU Licenses · Translations of GPLv2
  101. [101]
    Git Joins the Software Freedom Conservancy
    Dec 16, 2010 · Today, the Software Freedom Conservancy welcomes Git as its newest member. Git joins twenty-three other Conservancy members, who receive the ...Missing: trademark | Show results with:trademark
  102. [102]
    Git's trademark policy
    You can use "Git and the Git logo are either registered trademarks or trademarks of Software Freedom Conservancy, Inc., corporate home of the Git Project, in ...
  103. [103]
    If GitHub interacts with Git, and Git is licensed under GPLv2, shouldn ...
    Jan 25, 2017 · Since Git is licensed under GPLv2, and, to my understanding, GitHub interacts with Git, shouldn't the whole GitHub codebase be open-sourced in a GPL-compatible ...How do I stay compliant with GPL when forking on Github?Can I use GPL libraries temporarily for prototyping and make the ...More results from softwareengineering.stackexchange.comMissing: control | Show results with:control
  104. [104]
    protocol-v2 Documentation - Git
    This document presents a specification for a version 2 of Git's wire protocol. Protocol v2 will improve upon v1 in the following ways.<|separator|>
  105. [105]
    Introducing Git protocol version 2 | Google Open Source Blog
    May 18, 2018 · Git protocol v2 is a major update that removes inefficiency, enables server-side filtering of references, and improves performance, especially ...Missing: security | Show results with:security
  106. [106]
    Git 2.18 Adds Support for Git Protocol Version 2 - InfoQ
    Jun 29, 2018 · This new version aims to improve performance and is better suited for future improvements, according to Williams.
  107. [107]
    libgit2/libgit2: A cross-platform, linkable library implementation of Git ...
    libgit2 is a portable, pure C implementation of the Git core methods provided as a linkable library with a solid API, allowing to build Git functionality ...
  108. [108]
    libgit2
    libgit2 is a portable, pure C implementation of the Git core methods provided as a re-entrant linkable library, with an API that's designed to be ergonomic ...Reference · Learning · Security
  109. [109]
    Hg-Git Mercurial Plugin
    The Hg-Git plugin can convert commits/changesets losslessly from one system to another, so you can push via a Mercurial repository and another Mercurial client ...
  110. [110]
    pack-format Documentation - Git
    The multi-pack-index files refer to multiple pack-files and loose objects. In order to allow extensions that add extra data to the MIDX, we organize the ...<|separator|>
  111. [111]
  112. [112]
    draft-ietf-git-github-wg-configuration-07 - IETF Datatracker
    This document specifies using the git protocol [git-protocol] itself for both of these tasks. Every IETF working group repository on GitHub will have a ...
  113. [113]
    Git Merge 2025 | Sep 29 - 30, 2025 | San Francisco, CA & Online ...
    Celebrating 20 years of Git. Git Merge is a conference dedicated to the version control tool that started it all—and the people who use it every day. As Git ...Missing: Roundtable | Show results with:Roundtable
  114. [114]
    unit-tests Documentation - Git
    The Test Anything Protocol is a text-based interface that allows tests to communicate with a test harness. It is already used by Git's integration test suite.Definitions · Choosing a test harness
  115. [115]
    Git hash function transition - The Linux Kernel Archives
    We introduce a new repository format extension. Repositories with this extension enabled use SHA-256 instead of SHA-1 to name their objects.Missing: 2.29 | Show results with:2.29<|separator|>
  116. [116]
    Git 2.51: Preparing for the future with SHA-256 - Help Net Security
    Aug 19, 2025 · While repositories are still created with SHA-1 by default, more internal plumbing now understands and supports SHA-256. This includes parts of ...
  117. [117]
    iterative/dvc: Data Versioning and ML Experiments - GitHub
    Data Version Control or DVC is a command line tool and VS Code Extension to help you develop reproducible machine learning projects.Issues 156 · Pull requests 1 · Home · iterative/dvc Wiki · Releases 557Missing: emerging | Show results with:emerging