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