git last updated in 2.49.0
NAME
git - the stupid content tracker
SYNOPSIS
git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
[--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
[--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
<command> [<args>]
DESCRIPTION
Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.
See gittutorial[7] to get started, then see giteveryday[7] for a useful minimum set of commands. The Git User’s Manual has a more in-depth introduction.
After you mastered the basic concepts, you can come back to this page to learn what commands Git offers. You can learn more about individual Git commands with “git help command”. gitcli[7] manual page gives you an overview of the command-line command syntax.
A formatted and hyperlinked copy of the latest Git documentation can be viewed at https://git.github.io/htmldocs/git.html or https://git-scm.com/docs.
OPTIONS
-v
—version
Prints the Git suite version that the git program came from.
This option is internally converted to git version ...
and accepts the same options as the git-version[1] command. If --help
is also given, it takes precedence over --version
.
-h
—help
Prints the synopsis and a list of the most commonly used commands. If the option --all
or -a
is given then all available commands are printed. If a Git command is named this option will bring up the manual page for that command.
Other options are available to control how the manual page is displayed. See git-help[1] for more information, because git --help ...
is converted internally into git help ...
.
-C
Run as if git was started in -C
options are given, each subsequent non-absolute -C <path>
is interpreted relative to the preceding -C <path>
. If -C ""
, then the current working directory is left unchanged.
This option affects options that expect path name like --git-dir
and --work-tree
in that their interpretations of the path names would be made relative to the working directory caused by the -C
option. For example the following invocations are equivalent:
git --git-dir=a.git --work-tree=b -C c status
git --git-dir=c/a.git --work-tree=c/b status
-c
Pass a configuration parameter to the command. The value given will override values from configuration files. The
Note that omitting the =
in git -c foo.bar ...
is allowed and sets foo.bar
to the boolean true value (just like [foo]bar
would in a config file). Including the equals but with an empty value (like git -c foo.bar= ...
) sets foo.bar
to the empty string which git config --type=bool
will convert to false
.
—config-env=
Like -c <name>=<value>
, give configuration variable -c
there is no shortcut for directly setting the value to an empty string, instead the environment variable itself must be set to the empty string. It is an error if the <envvar>
does not exist in the environment. <envvar>
may not contain an equals sign to avoid ambiguity with <name>
containing one.
This is useful for cases where you want to pass transitory configuration options to git, but are doing so on operating systems where other processes might be able to read your command line (e.g. /proc/self/cmdline
), but not your environment (e.g. /proc/self/environ
). That behavior is the default on Linux, but may not be on your system.
Note that this might add security for variables such as http.extraHeader
where the sensitive information is part of the value, but not e.g. url.<base>.insteadOf
where the sensitive information can be part of the key.
—exec-path[=
Path to wherever your core Git programs are installed. This can also be controlled by setting the GIT_EXEC_PATH environment variable. If no path is given, git will print the current setting and then exit.
—html-path
Print the path, without trailing slash, where Git’s HTML documentation is installed and exit.
—man-path
Print the manpath (see man(1)
) for the man pages for this version of Git and exit.
—info-path
Print the path where the Info files documenting this version of Git are installed and exit.
-p
—paginate
Pipe all output into less (or if set, $PAGER) if standard output is a terminal. This overrides the pager.<cmd>
configuration options (see the “Configuration Mechanism” section below).
-P
—no-pager
Do not pipe Git output into a pager.
—git-dir=
Set the path to the repository (“.git” directory). This can also be controlled by setting the GIT_DIR
environment variable. It can be an absolute path or relative path to current working directory.
Specifying the location of the “.git” directory using this option (or GIT_DIR
environment variable) turns off the repository discovery that tries to find a directory with “.git” subdirectory (which is how the repository and the top-level of the working tree are discovered), and tells Git that you are at the top level of the working tree. If you are not at the top-level directory of the working tree, you should tell Git where the top-level of the working tree is, with the --work-tree=<path>
option (or GIT_WORK_TREE
environment variable)
If you just want to run git as if it was started in <path>
then use git -C <path>
.
—work-tree=
Set the path to the working tree. It can be an absolute path or a path relative to the current working directory. This can also be controlled by setting the GIT_WORK_TREE environment variable and the core.worktree configuration variable (see core.worktree in git-config[1] for a more detailed discussion).
—namespace=
Set the Git namespace. See gitnamespaces[7] for more details. Equivalent to setting the GIT_NAMESPACE
environment variable.
—bare
Treat the repository as a bare repository. If GIT_DIR environment is not set, it is set to the current working directory.
—no-replace-objects
Do not use replacement refs to replace Git objects. This is equivalent to exporting the GIT_NO_REPLACE_OBJECTS
environment variable with any value. See git-replace[1] for more information.
—no-lazy-fetch
Do not fetch missing objects from the promisor remote on demand. Useful together with git cat-file -e <object>
to see if the object is locally available. This is equivalent to setting the GIT_NO_LAZY_FETCH
environment variable to 1
.
—no-optional-locks
Do not perform optional operations that require locks. This is equivalent to setting the GIT_OPTIONAL_LOCKS
to 0
.
—no-advice
Disable all advice hints from being printed.
—literal-pathspecs
Treat pathspecs literally (i.e. no globbing, no pathspec magic). This is equivalent to setting the GIT_LITERAL_PATHSPECS
environment variable to 1
.
—glob-pathspecs
Add “glob” magic to all pathspec. This is equivalent to setting the GIT_GLOB_PATHSPECS
environment variable to 1
. Disabling globbing on individual pathspecs can be done using pathspec magic ”:(literal)”
—noglob-pathspecs
Add “literal” magic to all pathspec. This is equivalent to setting the GIT_NOGLOB_PATHSPECS
environment variable to 1
. Enabling globbing on individual pathspecs can be done using pathspec magic ”:(glob)”
—icase-pathspecs
Add “icase” magic to all pathspec. This is equivalent to setting the GIT_ICASE_PATHSPECS
environment variable to 1
.
—list-cmds=
List commands by group. This is an internal/experimental option and may change or be removed in the future. Supported groups are: builtins, parseopt (builtin commands that use parse-options), main (all commands in libexec directory), others (all other commands in $PATH
that have git- prefix), list-
—attr-source=
Read gitattributes from GIT_ATTR_SOURCE
environment variable.
GIT COMMANDS
We divide Git into high level (“porcelain”) commands and low level (“plumbing”) commands.
High-level commands (porcelain)
We separate the porcelain commands into the main commands and some ancillary user utilities.
Main porcelain commands
Add file contents to the index
Apply a series of patches from a mailbox
Create an archive of files from a named tree
Download missing objects in a partial clone
Use binary search to find the commit that introduced a bug
List, create, or delete branches
Move objects and refs by archive
Switch branches or restore working tree files
Apply the changes introduced by some existing commits
Graphical alternative to git-commit
Remove untracked files from the working tree
Clone a repository into a new directory
Record changes to the repository
Give an object a human readable name based on an available ref
Show changes between commits, commit and working tree, etc
Download objects and refs from another repository
Prepare patches for e-mail submission
Cleanup unnecessary files and optimize the local repository
Print lines matching a pattern
A portable graphical interface to Git
Create an empty Git repository or reinitialize an existing one
Show commit logs
Run tasks to optimize Git repository data
Join two or more development histories together
Move or rename a file, a directory, or a symlink
Add or inspect object notes
Fetch from and integrate with another repository or a local branch
Update remote refs along with associated objects
Compare two commit ranges (e.g. two versions of a branch)
Reapply commits on top of another base tip
Reset current HEAD to the specified state
Restore working tree files
Revert some existing commits
Remove files from the working tree and from the index
Summarize git log output
Show various types of objects
Reduce your working tree to a subset of tracked files
Stash the changes in a dirty working directory away
Show the working tree status
Initialize, update or inspect submodules
Switch branches
Create, list, delete or verify a tag object signed with GPG
Manage multiple working trees
The Git repository browser
A tool for managing large Git repositories
Ancillary Commands
Manipulators:
Get and set repository or global options
Git data exporter
Backend for fast Git data importers
Rewrite branches
Run merge conflict resolution tools to resolve merge conflicts
Pack heads and tags for efficient repository access
Prune all unreachable objects from the object database
Manage reflog information
Low-level access to refs
Manage set of tracked repositories
Pack unpacked objects in a repository
Create, list, delete refs to replace objects
Interrogators:
Annotate file lines with commit information
Show what revision and author last modified each line of a file
Collect information for user to file a bug report
Count unpacked number of objects and their disk consumption
Generate a zip archive of diagnostic information
Show changes using common diff tools
Verifies the connectivity and validity of the objects in the database
Display help information about Git
Instantly browse your working repository in gitweb
Perform merge without touching index or working tree
Reuse recorded resolution of conflicted merges
Show branches and their commits
Check the GPG signature of commits
Check the GPG signature of tags
Display version information about Git
Show logs with differences each commit introduces
Git web interface (web frontend to Git repositories)
Interacting with Others
These commands are to interact with foreign SCM and with other people via patch over e-mail.
Import a GNU Arch repository into Git
Export a single commit to a CVS checkout
Salvage your data out of another SCM people love to hate
A CVS server emulator for Git
Send a collection of patches from stdin to an IMAP folder
Import from and submit to Perforce repositories
Applies a quilt patchset onto the current branch
Generates a summary of pending changes
Send a collection of patches as emails
Bidirectional operation between a Subversion repository and Git
Reset, restore and revert
There are three commands with similar names: git reset
,git restore
and git revert
.
- git-revert[1] is about making a new commit that reverts the changes made by other commits.
- git-restore[1] is about restoring files in the working tree from either the index or another commit. This command does not update your branch. The command can also be used to restore files in the index from another commit.
- git-reset[1] is about updating your branch, moving the tip in order to add or remove commits from the branch. This operation changes the commit history.
git reset
can also be used to restore the index, overlapping withgit restore
.
Low-level commands (plumbing)
Although Git includes its own porcelain layer, its low-level commands are sufficient to support development of alternative porcelains. Developers of such porcelains might start by reading about git-update-index[1] and git-read-tree[1].
The interface (input, output, set of options and the semantics) to these low-level commands are meant to be a lot more stable than Porcelain level commands, because these commands are primarily for scripted use. The interface to Porcelain commands on the other hand are subject to change in order to improve the end user experience.
The following description divides the low-level commands into commands that manipulate objects (in the repository, index, and working tree), commands that interrogate and compare objects, and commands that move objects and references between repositories.
Manipulation commands
Apply a patch to files and/or to the index
Copy files from the index to the working tree
Write and verify Git commit-graph files
Create a new commit object
Compute object ID and optionally create an object from a file
Build pack index file for an existing packed archive
Run a three-way file merge
Run a merge for files needing merging
Creates a tag object with extra validation
Build a tree-object from ls-tree formatted text
Write and verify multi-pack-indexes
Create a packed archive of objects
Remove extra objects that are already in pack files
Reads tree information into the index
EXPERIMENTAL: Replay commits on a new base, works with bare repos too
Read, modify and delete symbolic refs
Unpack objects from a packed archive
Register file contents in the working tree to the index
Update the object name stored in a ref safely
Create a tree object from the current index
Interrogation commands
Provide contents or details of repository objects
Find commits yet to be applied to upstream
Compares files in the working tree and the index
Compare a tree to the working tree or index
Compares the content and mode of blobs found via two tree objects
Output information on each ref
Run a Git command on a list of repositories
Extract commit ID from an archive created using git-archive
Show information about files in the index and the working tree
List references in a remote repository
List the contents of a tree object
Find as good common ancestors as possible for a merge
Find symbolic names for given revs
Find redundant pack files
Lists commit objects in reverse chronological order
Pick out and massage parameters
Show packed archive index
List references in a local repository
Creates a temporary file with a blob’s contents
Show a Git logical variable
Validate packed Git archive files
In general, the interrogate commands do not touch the files in the working tree.
Syncing repositories
A really simple server for Git repositories
Receive missing objects from another repository
Server side implementation of Git over HTTP
Push objects over Git protocol to another repository
Update auxiliary info file to help dumb servers
The following are helper commands used by the above; end users typically do not use them directly.
Download from a remote Git repository via HTTP
Push objects over HTTP/DAV to another repository
Receive what is pushed into the repository
Restricted login shell for Git-only SSH access
Send archive back to git-archive
Send objects packed back to git-fetch-pack
Internal helper commands
These are internal helper commands used by other commands; end users typically do not use them directly.
Display gitattributes information
Debug gitignore / exclude files
Show canonical names and email addresses of contacts
Ensures that a reference name is well formed
Display data in columns
Retrieve and store user credentials
Helper to temporarily store passwords in memory
Helper to store credentials on disk
Produce a merge commit message
Run git hooks
Add or parse structured information in commit messages
Extracts patch and authorship from a single e-mail message
Simple UNIX mbox splitter program
The standard helper program to use with git-merge-index
Compute unique ID for a patch
Git’s i18n setup code for shell scripts
Common Git shell script setup code
Remove unnecessary whitespace
Guides
The following documentation pages are guides about Git concepts.
A Git core tutorial for developers
Providing usernames and passwords to Git
Git for CVS users
Tweaking diff output
A useful minimum set of commands for Everyday Git
Frequently asked questions about using Git
A Git Glossary
Git namespaces
Helper programs to interact with remote repositories
Mounting one repository inside another
A tutorial introduction to Git
A tutorial introduction to Git: part two
An overview of recommended workflows with Git
Repository, command and file interfaces
This documentation discusses repository and command interfaces which users are expected to interact with directly. See --user-formats
in git-help[1] for more details on the criteria.
Defining attributes per path
Git command-line interface and conventions
Hooks used by Git
Specifies intentionally untracked files to ignore
Map author/committer names and/or E-Mail addresses
Defining submodule properties
Git Repository Layout
Specifying revisions and ranges for Git
File formats, protocols and other developer interfaces
This documentation discusses file formats, over-the-wire protocols and other git developer interfaces. See --developer-interfaces
in git-help[1].
The bundle file format
Chunk-based file formats
Git commit-graph format
Git index format
Git pack format
Git cryptographic signature formats
Protocol v0 and v1 capabilities
Things common to various protocols
Git HTTP-based protocols
How packs are transferred over-the-wire
Git Wire Protocol, Version 2
Configuration Mechanism
Git uses a simple text format to store customizations that are per repository and are per user. Such a configuration file may look like this:
#
# A '#' or ';' character indicates a comment.
#
; core variables
[core]
; Don't trust file modes
filemode = false
; user identity
[user]
name = "Junio C Hamano"
email = "gitster@pobox.com"
Various commands read from the configuration file and adjust their operation accordingly. See git-config[1] for a list and more details about the configuration mechanism.