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