Documentation / git.txton commit Merge branch 'maint' (60e3cad)
   1git(7)
   2======
   3
   4NAME
   5----
   6git - the stupid content tracker
   7
   8
   9SYNOPSIS
  10--------
  11[verse]
  12'git' [--version] [--exec-path[=GIT_EXEC_PATH]]
  13    [-p|--paginate|--no-pager]
  14    [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
  15    [--help] COMMAND [ARGS]
  16
  17DESCRIPTION
  18-----------
  19Git is a fast, scalable, distributed revision control system with an
  20unusually rich command set that provides both high-level operations
  21and full access to internals.
  22
  23See this link:tutorial.html[tutorial] to get started, then see
  24link:everyday.html[Everyday Git] for a useful minimum set of commands, and
  25"man git-commandname" for documentation of each command.  CVS users may
  26also want to read link:cvs-migration.html[CVS migration].  See
  27link:user-manual.html[Git User's Manual] for a more in-depth
  28introduction.
  29
  30The COMMAND is either a name of a Git command (see below) or an alias
  31as defined in the configuration file (see linkgit:git-config[1]).
  32
  33Formatted and hyperlinked version of the latest git
  34documentation can be viewed at
  35`http://www.kernel.org/pub/software/scm/git/docs/`.
  36
  37ifdef::stalenotes[]
  38[NOTE]
  39============
  40
  41You are reading the documentation for the latest (possibly
  42unreleased) version of git, that is available from 'master'
  43branch of the `git.git` repository.
  44Documentation for older releases are available here:
  45
  46* link:v1.5.4.3/git.html[documentation for release 1.5.4.3]
  47
  48* release notes for
  49  link:RelNotes-1.5.4.3.txt[1.5.4.3],
  50  link:RelNotes-1.5.4.2.txt[1.5.4.2],
  51  link:RelNotes-1.5.4.1.txt[1.5.4.1],
  52  link:RelNotes-1.5.4.txt[1.5.4].
  53
  54* link:v1.5.3.8/git.html[documentation for release 1.5.3.8]
  55
  56* release notes for
  57  link:RelNotes-1.5.3.8.txt[1.5.3.8],
  58  link:RelNotes-1.5.3.7.txt[1.5.3.7],
  59  link:RelNotes-1.5.3.6.txt[1.5.3.6],
  60  link:RelNotes-1.5.3.5.txt[1.5.3.5],
  61  link:RelNotes-1.5.3.4.txt[1.5.3.4],
  62  link:RelNotes-1.5.3.3.txt[1.5.3.3],
  63  link:RelNotes-1.5.3.2.txt[1.5.3.2],
  64  link:RelNotes-1.5.3.1.txt[1.5.3.1],
  65  link:RelNotes-1.5.3.txt[1.5.3].
  66
  67* release notes for
  68  link:RelNotes-1.5.2.5.txt[1.5.2.5],
  69  link:RelNotes-1.5.2.4.txt[1.5.2.4],
  70  link:RelNotes-1.5.2.3.txt[1.5.2.3],
  71  link:RelNotes-1.5.2.2.txt[1.5.2.2],
  72  link:RelNotes-1.5.2.1.txt[1.5.2.1],
  73  link:RelNotes-1.5.2.txt[1.5.2].
  74
  75* link:v1.5.1.6/git.html[documentation for release 1.5.1.6]
  76
  77* release notes for
  78  link:RelNotes-1.5.1.6.txt[1.5.1.6],
  79  link:RelNotes-1.5.1.5.txt[1.5.1.5],
  80  link:RelNotes-1.5.1.4.txt[1.5.1.4],
  81  link:RelNotes-1.5.1.3.txt[1.5.1.3],
  82  link:RelNotes-1.5.1.2.txt[1.5.1.2],
  83  link:RelNotes-1.5.1.1.txt[1.5.1.1],
  84  link:RelNotes-1.5.1.txt[1.5.1].
  85
  86* link:v1.5.0.7/git.html[documentation for release 1.5.0.7]
  87
  88* release notes for
  89  link:RelNotes-1.5.0.7.txt[1.5.0.7],
  90  link:RelNotes-1.5.0.6.txt[1.5.0.6],
  91  link:RelNotes-1.5.0.5.txt[1.5.0.5],
  92  link:RelNotes-1.5.0.3.txt[1.5.0.3],
  93  link:RelNotes-1.5.0.2.txt[1.5.0.2],
  94  link:RelNotes-1.5.0.1.txt[1.5.0.1],
  95  link:RelNotes-1.5.0.txt[1.5.0].
  96
  97* documentation for release link:v1.4.4.4/git.html[1.4.4.4],
  98  link:v1.3.3/git.html[1.3.3],
  99  link:v1.2.6/git.html[1.2.6],
 100  link:v1.0.13/git.html[1.0.13].
 101
 102============
 103
 104endif::stalenotes[]
 105
 106OPTIONS
 107-------
 108--version::
 109        Prints the git suite version that the 'git' program came from.
 110
 111--help::
 112        Prints the synopsis and a list of the most commonly used
 113        commands. If the option '--all' or '-a' is given then all
 114        available commands are printed. If a git command is named this
 115        option will bring up the manual page for that command.
 116+
 117Other options are available to control how the manual page is
 118displayed. See linkgit:git-help[1] for more information,
 119because 'git --help ...' is converted internally into 'git
 120help ...'.
 121
 122--exec-path::
 123        Path to wherever your core git programs are installed.
 124        This can also be controlled by setting the GIT_EXEC_PATH
 125        environment variable. If no path is given 'git' will print
 126        the current setting and then exit.
 127
 128-p|--paginate::
 129        Pipe all output into 'less' (or if set, $PAGER).
 130
 131--no-pager::
 132        Do not pipe git output into a pager.
 133
 134--git-dir=<path>::
 135        Set the path to the repository. This can also be controlled by
 136        setting the GIT_DIR environment variable.
 137
 138--work-tree=<path>::
 139        Set the path to the working tree.  The value will not be
 140        used in combination with repositories found automatically in
 141        a .git directory (i.e. $GIT_DIR is not set).
 142        This can also be controlled by setting the GIT_WORK_TREE
 143        environment variable and the core.worktree configuration
 144        variable.
 145
 146--bare::
 147        Treat the repository as a bare repository.  If GIT_DIR
 148        environment is not set, it is set to the current working
 149        directory.
 150
 151
 152FURTHER DOCUMENTATION
 153---------------------
 154
 155See the references above to get started using git.  The following is
 156probably more detail than necessary for a first-time user.
 157
 158The link:user-manual.html#git-concepts[git concepts chapter of the
 159user-manual] and the link:core-tutorial.html[Core tutorial] both provide
 160introductions to the underlying git architecture.
 161
 162See also the link:howto-index.html[howto] documents for some useful
 163examples.
 164
 165The internals are documented link:technical/api-index.html[here].
 166
 167GIT COMMANDS
 168------------
 169
 170We divide git into high level ("porcelain") commands and low level
 171("plumbing") commands.
 172
 173High-level commands (porcelain)
 174-------------------------------
 175
 176We separate the porcelain commands into the main commands and some
 177ancillary user utilities.
 178
 179Main porcelain commands
 180~~~~~~~~~~~~~~~~~~~~~~~
 181
 182include::cmds-mainporcelain.txt[]
 183
 184Ancillary Commands
 185~~~~~~~~~~~~~~~~~~
 186Manipulators:
 187
 188include::cmds-ancillarymanipulators.txt[]
 189
 190Interrogators:
 191
 192include::cmds-ancillaryinterrogators.txt[]
 193
 194
 195Interacting with Others
 196~~~~~~~~~~~~~~~~~~~~~~~
 197
 198These commands are to interact with foreign SCM and with other
 199people via patch over e-mail.
 200
 201include::cmds-foreignscminterface.txt[]
 202
 203
 204Low-level commands (plumbing)
 205-----------------------------
 206
 207Although git includes its
 208own porcelain layer, its low-level commands are sufficient to support
 209development of alternative porcelains.  Developers of such porcelains
 210might start by reading about linkgit:git-update-index[1] and
 211linkgit:git-read-tree[1].
 212
 213The interface (input, output, set of options and the semantics)
 214to these low-level commands are meant to be a lot more stable
 215than Porcelain level commands, because these commands are
 216primarily for scripted use.  The interface to Porcelain commands
 217on the other hand are subject to change in order to improve the
 218end user experience.
 219
 220The following description divides
 221the low-level commands into commands that manipulate objects (in
 222the repository, index, and working tree), commands that interrogate and
 223compare objects, and commands that move objects and references between
 224repositories.
 225
 226
 227Manipulation commands
 228~~~~~~~~~~~~~~~~~~~~~
 229
 230include::cmds-plumbingmanipulators.txt[]
 231
 232
 233Interrogation commands
 234~~~~~~~~~~~~~~~~~~~~~~
 235
 236include::cmds-plumbinginterrogators.txt[]
 237
 238In general, the interrogate commands do not touch the files in
 239the working tree.
 240
 241
 242Synching repositories
 243~~~~~~~~~~~~~~~~~~~~~
 244
 245include::cmds-synchingrepositories.txt[]
 246
 247The following are helper programs used by the above; end users
 248typically do not use them directly.
 249
 250include::cmds-synchelpers.txt[]
 251
 252
 253Internal helper commands
 254~~~~~~~~~~~~~~~~~~~~~~~~
 255
 256These are internal helper commands used by other commands; end
 257users typically do not use them directly.
 258
 259include::cmds-purehelpers.txt[]
 260
 261
 262Configuration Mechanism
 263-----------------------
 264
 265Starting from 0.99.9 (actually mid 0.99.8.GIT), `.git/config` file
 266is used to hold per-repository configuration options.  It is a
 267simple text file modeled after `.ini` format familiar to some
 268people.  Here is an example:
 269
 270------------
 271#
 272# A '#' or ';' character indicates a comment.
 273#
 274
 275; core variables
 276[core]
 277        ; Don't trust file modes
 278        filemode = false
 279
 280; user identity
 281[user]
 282        name = "Junio C Hamano"
 283        email = "junkio@twinsun.com"
 284
 285------------
 286
 287Various commands read from the configuration file and adjust
 288their operation accordingly.
 289
 290
 291Identifier Terminology
 292----------------------
 293<object>::
 294        Indicates the object name for any type of object.
 295
 296<blob>::
 297        Indicates a blob object name.
 298
 299<tree>::
 300        Indicates a tree object name.
 301
 302<commit>::
 303        Indicates a commit object name.
 304
 305<tree-ish>::
 306        Indicates a tree, commit or tag object name.  A
 307        command that takes a <tree-ish> argument ultimately wants to
 308        operate on a <tree> object but automatically dereferences
 309        <commit> and <tag> objects that point at a <tree>.
 310
 311<commit-ish>::
 312        Indicates a commit or tag object name.  A
 313        command that takes a <commit-ish> argument ultimately wants to
 314        operate on a <commit> object but automatically dereferences
 315        <tag> objects that point at a <commit>.
 316
 317<type>::
 318        Indicates that an object type is required.
 319        Currently one of: `blob`, `tree`, `commit`, or `tag`.
 320
 321<file>::
 322        Indicates a filename - almost always relative to the
 323        root of the tree structure `GIT_INDEX_FILE` describes.
 324
 325Symbolic Identifiers
 326--------------------
 327Any git command accepting any <object> can also use the following
 328symbolic notation:
 329
 330HEAD::
 331        indicates the head of the current branch (i.e. the
 332        contents of `$GIT_DIR/HEAD`).
 333
 334<tag>::
 335        a valid tag 'name'
 336        (i.e. the contents of `$GIT_DIR/refs/tags/<tag>`).
 337
 338<head>::
 339        a valid head 'name'
 340        (i.e. the contents of `$GIT_DIR/refs/heads/<head>`).
 341
 342For a more complete list of ways to spell object names, see
 343"SPECIFYING REVISIONS" section in linkgit:git-rev-parse[1].
 344
 345
 346File/Directory Structure
 347------------------------
 348
 349Please see the link:repository-layout.html[repository layout] document.
 350
 351Read link:hooks.html[hooks] for more details about each hook.
 352
 353Higher level SCMs may provide and manage additional information in the
 354`$GIT_DIR`.
 355
 356
 357Terminology
 358-----------
 359Please see the link:glossary.html[glossary] document.
 360
 361
 362Environment Variables
 363---------------------
 364Various git commands use the following environment variables:
 365
 366The git Repository
 367~~~~~~~~~~~~~~~~~~
 368These environment variables apply to 'all' core git commands. Nb: it
 369is worth noting that they may be used/overridden by SCMS sitting above
 370git so take care if using Cogito etc.
 371
 372'GIT_INDEX_FILE'::
 373        This environment allows the specification of an alternate
 374        index file. If not specified, the default of `$GIT_DIR/index`
 375        is used.
 376
 377'GIT_OBJECT_DIRECTORY'::
 378        If the object storage directory is specified via this
 379        environment variable then the sha1 directories are created
 380        underneath - otherwise the default `$GIT_DIR/objects`
 381        directory is used.
 382
 383'GIT_ALTERNATE_OBJECT_DIRECTORIES'::
 384        Due to the immutable nature of git objects, old objects can be
 385        archived into shared, read-only directories. This variable
 386        specifies a ":" separated list of git object directories which
 387        can be used to search for git objects. New objects will not be
 388        written to these directories.
 389
 390'GIT_DIR'::
 391        If the 'GIT_DIR' environment variable is set then it
 392        specifies a path to use instead of the default `.git`
 393        for the base of the repository.
 394
 395'GIT_WORK_TREE'::
 396        Set the path to the working tree.  The value will not be
 397        used in combination with repositories found automatically in
 398        a .git directory (i.e. $GIT_DIR is not set).
 399        This can also be controlled by the '--work-tree' command line
 400        option and the core.worktree configuration variable.
 401
 402git Commits
 403~~~~~~~~~~~
 404'GIT_AUTHOR_NAME'::
 405'GIT_AUTHOR_EMAIL'::
 406'GIT_AUTHOR_DATE'::
 407'GIT_COMMITTER_NAME'::
 408'GIT_COMMITTER_EMAIL'::
 409'GIT_COMMITTER_DATE'::
 410'EMAIL'::
 411        see linkgit:git-commit-tree[1]
 412
 413git Diffs
 414~~~~~~~~~
 415'GIT_DIFF_OPTS'::
 416        Only valid setting is "--unified=??" or "-u??" to set the
 417        number of context lines shown when a unified diff is created.
 418        This takes precedence over any "-U" or "--unified" option
 419        value passed on the git diff command line.
 420
 421'GIT_EXTERNAL_DIFF'::
 422        When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
 423        program named by it is called, instead of the diff invocation
 424        described above.  For a path that is added, removed, or modified,
 425        'GIT_EXTERNAL_DIFF' is called with 7 parameters:
 426
 427        path old-file old-hex old-mode new-file new-hex new-mode
 428+
 429where:
 430
 431        <old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
 432                         contents of <old|new>,
 433        <old|new>-hex:: are the 40-hexdigit SHA1 hashes,
 434        <old|new>-mode:: are the octal representation of the file modes.
 435
 436+
 437The file parameters can point at the user's working file
 438(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
 439when a new file is added), or a temporary file (e.g. `old-file` in the
 440index).  'GIT_EXTERNAL_DIFF' should not worry about unlinking the
 441temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
 442+
 443For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
 444parameter, <path>.
 445
 446other
 447~~~~~
 448'GIT_MERGE_VERBOSITY'::
 449        A number controlling the amount of output shown by
 450        the recursive merge strategy.  Overrides merge.verbosity.
 451        See linkgit:git-merge[1]
 452
 453'GIT_PAGER'::
 454        This environment variable overrides `$PAGER`. If it is set
 455        to an empty string or to the value "cat", git will not launch
 456        a pager.
 457
 458'GIT_SSH'::
 459        If this environment variable is set then linkgit:git-fetch[1]
 460        and linkgit:git-push[1] will use this command instead
 461        of `ssh` when they need to connect to a remote system.
 462        The 'GIT_SSH' command will be given exactly two arguments:
 463        the 'username@host' (or just 'host') from the URL and the
 464        shell command to execute on that remote system.
 465+
 466To pass options to the program that you want to list in GIT_SSH
 467you will need to wrap the program and options into a shell script,
 468then set GIT_SSH to refer to the shell script.
 469+
 470Usually it is easier to configure any desired options through your
 471personal `.ssh/config` file.  Please consult your ssh documentation
 472for further details.
 473
 474'GIT_FLUSH'::
 475        If this environment variable is set to "1", then commands such
 476        as git-blame (in incremental mode), git-rev-list, git-log,
 477        git-whatchanged, etc., will force a flush of the output stream
 478        after each commit-oriented record have been flushed.   If this
 479        variable is set to "0", the output of these commands will be done
 480        using completely buffered I/O.   If this environment variable is
 481        not set, git will choose buffered or record-oriented flushing
 482        based on whether stdout appears to be redirected to a file or not.
 483
 484'GIT_TRACE'::
 485        If this variable is set to "1", "2" or "true" (comparison
 486        is case insensitive), git will print `trace:` messages on
 487        stderr telling about alias expansion, built-in command
 488        execution and external command execution.
 489        If this variable is set to an integer value greater than 1
 490        and lower than 10 (strictly) then git will interpret this
 491        value as an open file descriptor and will try to write the
 492        trace messages into this file descriptor.
 493        Alternatively, if this variable is set to an absolute path
 494        (starting with a '/' character), git will interpret this
 495        as a file path and will try to write the trace messages
 496        into it.
 497
 498Discussion[[Discussion]]
 499------------------------
 500
 501More detail on the following is available from the
 502link:user-manual.html#git-concepts[git concepts chapter of the
 503user-manual] and the link:core-tutorial.html[Core tutorial].
 504
 505A git project normally consists of a working directory with a ".git"
 506subdirectory at the top level.  The .git directory contains, among other
 507things, a compressed object database representing the complete history
 508of the project, an "index" file which links that history to the current
 509contents of the working tree, and named pointers into that history such
 510as tags and branch heads.
 511
 512The object database contains objects of three main types: blobs, which
 513hold file data; trees, which point to blobs and other trees to build up
 514directory hierarchies; and commits, which each reference a single tree
 515and some number of parent commits.
 516
 517The commit, equivalent to what other systems call a "changeset" or
 518"version", represents a step in the project's history, and each parent
 519represents an immediately preceding step.  Commits with more than one
 520parent represent merges of independent lines of development.
 521
 522All objects are named by the SHA1 hash of their contents, normally
 523written as a string of 40 hex digits.  Such names are globally unique.
 524The entire history leading up to a commit can be vouched for by signing
 525just that commit.  A fourth object type, the tag, is provided for this
 526purpose.
 527
 528When first created, objects are stored in individual files, but for
 529efficiency may later be compressed together into "pack files".
 530
 531Named pointers called refs mark interesting points in history.  A ref
 532may contain the SHA1 name of an object or the name of another ref.  Refs
 533with names beginning `ref/head/` contain the SHA1 name of the most
 534recent commit (or "head") of a branch under development.  SHA1 names of
 535tags of interest are stored under `ref/tags/`.  A special ref named
 536`HEAD` contains the name of the currently checked-out branch.
 537
 538The index file is initialized with a list of all paths and, for each
 539path, a blob object and a set of attributes.  The blob object represents
 540the contents of the file as of the head of the current branch.  The
 541attributes (last modified time, size, etc.) are taken from the
 542corresponding file in the working tree.  Subsequent changes to the
 543working tree can be found by comparing these attributes.  The index may
 544be updated with new content, and new commits may be created from the
 545content stored in the index.
 546
 547The index is also capable of storing multiple entries (called "stages")
 548for a given pathname.  These stages are used to hold the various
 549unmerged version of a file when a merge is in progress.
 550
 551Authors
 552-------
 553* git's founding father is Linus Torvalds <torvalds@osdl.org>.
 554* The current git nurse is Junio C Hamano <gitster@pobox.com>.
 555* The git potty was written by Andreas Ericsson <ae@op5.se>.
 556* General upbringing is handled by the git-list <git@vger.kernel.org>.
 557
 558Documentation
 559--------------
 560The documentation for git suite was started by David Greaves
 561<david@dgreaves.com>, and later enhanced greatly by the
 562contributors on the git-list <git@vger.kernel.org>.
 563
 564GIT
 565---
 566Part of the linkgit:git[7] suite