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