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