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