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