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