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