| git-commit(1) | |
| ============= | |
| NAME | |
| ---- | |
| git-commit - Record changes to the repository | |
| SYNOPSIS | |
| -------- | |
| [synopsis] | |
| git commit [-a | --interactive | --patch] [-s] [-v] [-u[<mode>]] [--amend] | |
| [--dry-run] [(-c | -C | --squash) <commit> | --fixup [(amend|reword):]<commit>] | |
| [-F <file> | -m <msg>] [--reset-author] [--allow-empty] | |
| [--allow-empty-message] [--no-verify] [-e] [--author=<author>] | |
| [--date=<date>] [--cleanup=<mode>] [--[no-]status] | |
| [-i | -o] [--pathspec-from-file=<file> [--pathspec-file-nul]] | |
| [(--trailer <token>[(=|:)<value>])...] [-S[<keyid>]] | |
| [--] [<pathspec>...] | |
| DESCRIPTION | |
| ----------- | |
| Create a new commit containing the current contents of the index and | |
| the given log message describing the changes. The new commit is a | |
| direct child of HEAD, usually the tip of the current branch, and the | |
| branch is updated to point to it (unless no branch is associated with | |
| the working tree, in which case `HEAD` is "detached" as described in | |
| linkgit:git-checkout[1]). | |
| The content to be committed can be specified in several ways: | |
| 1. by using linkgit:git-add[1] to incrementally "add" changes to the | |
| index before using the `commit` command (Note: even modified files | |
| must be "added"); | |
| 2. by using linkgit:git-rm[1] to remove files from the working tree | |
| and the index, again before using the `commit` command; | |
| 3. by listing files as arguments to the `commit` command | |
| (without `--interactive` or `--patch` switch), in which | |
| case the commit will ignore changes staged in the index, and instead | |
| record the current content of the listed files (which must already | |
| be known to Git); | |
| 4. by using the `-a` switch with the `commit` command to automatically | |
| "add" changes from all known files (i.e. all files that are already | |
| listed in the index) and to automatically "rm" files in the index | |
| that have been removed from the working tree, and then perform the | |
| actual commit; | |
| 5. by using the `--interactive` or `--patch` switches with the `commit` command | |
| to decide one by one which files or hunks should be part of the commit | |
| in addition to contents in the index, | |
| before finalizing the operation. See the ``Interactive Mode'' section of | |
| linkgit:git-add[1] to learn how to operate these modes. | |
| The `--dry-run` option can be used to obtain a | |
| summary of what is included by any of the above for the next | |
| commit by giving the same set of parameters (options and paths). | |
| If you make a commit and then find a mistake immediately after | |
| that, you can recover from it with `git reset`. | |
| :git-commit: 1 | |
| OPTIONS | |
| ------- | |
| `-a`:: | |
| `--all`:: | |
| Automatically stage files that have | |
| been modified and deleted, but new files you have not | |
| told Git about are not affected. | |
| `-p`:: | |
| `--patch`:: | |
| Use the interactive patch selection interface to choose | |
| which changes to commit. See linkgit:git-add[1] for | |
| details. | |
| include::diff-context-options.adoc[] | |
| `-C <commit>`:: | |
| `--reuse-message=<commit>`:: | |
| Take an existing _<commit>_ object, and reuse the log message | |
| and the authorship information (including the timestamp) | |
| when creating the commit. | |
| `-c <commit>`:: | |
| `--reedit-message=<commit>`:: | |
| Like `-C`, but with `-c` the editor is invoked, so that | |
| the user can further edit the commit message. | |
| `--fixup=[(amend|reword):]<commit>`:: | |
| Create a new commit which "fixes up" _<commit>_ when applied with | |
| `git rebase --autosquash`. Plain `--fixup=<commit>` creates a | |
| "fixup!" commit which changes the content of _<commit>_ but leaves | |
| its log message untouched. `--fixup=amend:<commit>` is similar but | |
| creates an "amend!" commit which also replaces the log message of | |
| _<commit>_ with the log message of the "amend!" commit. | |
| `--fixup=reword:<commit>` creates an "amend!" commit which | |
| replaces the log message of _<commit>_ with its own log message | |
| but makes no changes to the content of _<commit>_. | |
| + | |
| The commit created by plain `--fixup=<commit>` has a title | |
| composed of "fixup!" followed by the title of _<commit>_, | |
| and is recognized specially by `git rebase --autosquash`. The `-m` | |
| option may be used to supplement the log message of the created | |
| commit, but the additional commentary will be thrown away once the | |
| "fixup!" commit is squashed into _<commit>_ by | |
| `git rebase --autosquash`. | |
| + | |
| The commit created by `--fixup=amend:<commit>` is similar but its | |
| title is instead prefixed with "amend!". The log message of | |
| _<commit>_ is copied into the log message of the "amend!" commit and | |
| opened in an editor so it can be refined. When `git rebase | |
| --autosquash` squashes the "amend!" commit into _<commit>_, the | |
| log message of _<commit>_ is replaced by the refined log message | |
| from the "amend!" commit. It is an error for the "amend!" commit's | |
| log message to be empty unless `--allow-empty-message` is | |
| specified. | |
| + | |
| `--fixup=reword:<commit>` is shorthand for `--fixup=amend:<commit> | |
| --only`. It creates an "amend!" commit with only a log message | |
| (ignoring any changes staged in the index). When squashed by `git | |
| rebase --autosquash`, it replaces the log message of _<commit>_ | |
| without making any other changes. | |
| + | |
| Neither "fixup!" nor "amend!" commits change authorship of | |
| _<commit>_ when applied by `git rebase --autosquash`. | |
| See linkgit:git-rebase[1] for details. | |
| `--squash=<commit>`:: | |
| Construct a commit message for use with `git rebase --autosquash`. | |
| The commit message title is taken from the specified | |
| commit with a prefix of "squash! ". Can be used with additional | |
| commit message options (`-m`/`-c`/`-C`/`-F`). See | |
| linkgit:git-rebase[1] for details. | |
| `--reset-author`:: | |
| When used with `-C`/`-c`/`--amend` options, or when committing after a | |
| conflicting cherry-pick, declare that the authorship of the | |
| resulting commit now belongs to the committer. This also renews | |
| the author timestamp. | |
| `--short`:: | |
| When doing a dry-run, give the output in the short-format. See | |
| linkgit:git-status[1] for details. Implies `--dry-run`. | |
| `--branch`:: | |
| Show the branch and tracking info even in short-format. See | |
| linkgit:git-status[1] for details. | |
| `--porcelain`:: | |
| When doing a dry-run, give the output in a porcelain-ready | |
| format. See linkgit:git-status[1] for details. Implies | |
| `--dry-run`. | |
| `--long`:: | |
| When doing a dry-run, give the output in the long-format. This | |
| is the default output of linkgit:git-status[1]. Implies | |
| `--dry-run`. | |
| `-z`:: | |
| `--null`:: | |
| When showing `short` or `porcelain` linkgit:git-status[1] output, print the | |
| filename verbatim and terminate the entries with _NUL_, instead of _LF_. | |
| If no format is given, implies the `--porcelain` output format. | |
| Without the `-z` option, filenames with "unusual" characters are | |
| quoted as explained for the configuration variable `core.quotePath` | |
| (see linkgit:git-config[1]). | |
| `-F <file>`:: | |
| `--file=<file>`:: | |
| Take the commit message from _<file>_. Use '-' to | |
| read the message from the standard input. | |
| `--author=<author>`:: | |
| Override the commit author. Specify an explicit author using the | |
| standard `A U Thor <author@example.com>` format. Otherwise _<author>_ | |
| is assumed to be a pattern and is used to search for an existing | |
| commit by that author (i.e. `git rev-list --all -i --author=<author>`); | |
| the commit author is then copied from the first such commit found. | |
| `--date=<date>`:: | |
| Override the author date used in the commit. | |
| `-m <msg>`:: | |
| `--message=<msg>`:: | |
| Use _<msg>_ as the commit message. | |
| If multiple `-m` options are given, their values are | |
| concatenated as separate paragraphs. | |
| + | |
| The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`. | |
| `-t <file>`:: | |
| `--template=<file>`:: | |
| When editing the commit message, start the editor with the | |
| contents in _<file>_. The `commit.template` configuration | |
| variable is often used to give this option implicitly to the | |
| command. This mechanism can be used by projects that want to | |
| guide participants with some hints on what to write in the message | |
| in what order. If the user exits the editor without editing the | |
| message, the commit is aborted. This has no effect when a message | |
| is given by other means, e.g. with the `-m` or `-F` options. | |
| include::signoff-option.adoc[] | |
| `--trailer <token>[(=|:)<value>]`:: | |
| Specify a (_<token>_, _<value>_) pair that should be applied as a | |
| trailer. (e.g. `git commit --trailer "Signed-off-by:C O Mitter \ | |
| <committer@example.com>" --trailer "Helped-by:C O Mitter \ | |
| <committer@example.com>"` will add the `Signed-off-by` trailer | |
| and the `Helped-by` trailer to the commit message.) | |
| The `trailer.*` configuration variables | |
| (linkgit:git-interpret-trailers[1]) can be used to define if | |
| a duplicated trailer is omitted, where in the run of trailers | |
| each trailer would appear, and other details. | |
| `-n`:: | |
| `--verify`:: | |
| `--no-verify`:: | |
| Bypass the `pre-commit` and `commit-msg` hooks. | |
| See also linkgit:githooks[5]. | |
| `--allow-empty`:: | |
| Usually recording a commit that has the exact same tree as its | |
| sole parent commit is a mistake, and the command prevents you | |
| from making such a commit. This option bypasses the safety, and | |
| is primarily for use by foreign SCM interface scripts. | |
| `--allow-empty-message`:: | |
| Create a commit with an empty commit message without using plumbing | |
| commands like linkgit:git-commit-tree[1]. Like `--allow-empty`, this | |
| command is primarily for use by foreign SCM interface scripts. | |
| `--cleanup=<mode>`:: | |
| Determine how the supplied commit message should be | |
| cleaned up before committing. The '<mode>' can be `strip`, | |
| `whitespace`, `verbatim`, `scissors` or `default`. | |
| + | |
| -- | |
| `strip`:: | |
| Strip leading and trailing empty lines, trailing whitespace, | |
| commentary and collapse consecutive empty lines. | |
| `whitespace`:: | |
| Same as `strip` except #commentary is not removed. | |
| `verbatim`:: | |
| Do not change the message at all. | |
| `scissors`:: | |
| Same as `whitespace` except that everything from (and including) | |
| the line found below is truncated, if the message is to be edited. | |
| "`#`" can be customized with `core.commentChar`. | |
| # ------------------------ >8 ------------------------ | |
| `default`:: | |
| Same as `strip` if the message is to be edited. | |
| Otherwise `whitespace`. | |
| -- | |
| + | |
| The default can be changed by the `commit.cleanup` configuration | |
| variable (see linkgit:git-config[1]). | |
| `-e`:: | |
| `--edit`:: | |
| Let the user further edit the message taken from _<file>_ | |
| with `-F <file>`, command line with `-m <message>`, and | |
| from _<commit>_ with `-C <commit>`. | |
| `--no-edit`:: | |
| Use the selected commit message without launching an editor. | |
| For example, `git commit --amend --no-edit` amends a commit | |
| without changing its commit message. | |
| `--amend`:: | |
| Replace the tip of the current branch by creating a new | |
| commit. The recorded tree is prepared as usual (including | |
| the effect of the `-i` and `-o` options and explicit | |
| pathspec), and the message from the original commit is used | |
| as the starting point, instead of an empty message, when no | |
| other message is specified from the command line via options | |
| such as `-m`, `-F`, `-c`, etc. The new commit has the same | |
| parents and author as the current one (the `--reset-author` | |
| option can countermand this). | |
| + | |
| -- | |
| It is a rough equivalent for: | |
| ------ | |
| $ git reset --soft HEAD^ | |
| $ ... do something else to come up with the right tree ... | |
| $ git commit -c ORIG_HEAD | |
| ------ | |
| but can be used to amend a merge commit. | |
| -- | |
| + | |
| You should understand the implications of rewriting history if you | |
| amend a commit that has already been published. (See the "RECOVERING | |
| FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].) | |
| `--no-post-rewrite`:: | |
| Bypass the `post-rewrite` hook. | |
| `-i`:: | |
| `--include`:: | |
| Before making a commit out of staged contents so far, | |
| stage the contents of paths given on the command line | |
| as well. This is usually not what you want unless you | |
| are concluding a conflicted merge. | |
| `-o`:: | |
| `--only`:: | |
| Make a commit by taking the updated working tree contents | |
| of the paths specified on the | |
| command line, disregarding any contents that have been | |
| staged for other paths. This is the default mode of operation of | |
| `git commit` if any paths are given on the command line, | |
| in which case this option can be omitted. | |
| If this option is specified together with `--amend`, then | |
| no paths need to be specified, which can be used to amend | |
| the last commit without committing changes that have | |
| already been staged. If used together with `--allow-empty` | |
| paths are also not required, and an empty commit will be created. | |
| `--pathspec-from-file=<file>`:: | |
| Pass pathspec in _<file>_ instead of commandline args. If | |
| _<file>_ is exactly `-` then standard input is used. Pathspec | |
| elements are separated by _LF_ or _CR_/_LF_. Pathspec elements can be | |
| quoted as explained for the configuration variable `core.quotePath` | |
| (see linkgit:git-config[1]). See also `--pathspec-file-nul` and | |
| global `--literal-pathspecs`. | |
| `--pathspec-file-nul`:: | |
| Only meaningful with `--pathspec-from-file`. Pathspec elements are | |
| separated with _NUL_ character and all other characters are taken | |
| literally (including newlines and quotes). | |
| `-u[<mode>]`:: | |
| `--untracked-files[=<mode>]`:: | |
| Show untracked files. | |
| + | |
| -- | |
| The _<mode>_ parameter is optional (defaults to `all`), and is used to | |
| specify the handling of untracked files; when `-u` is not used, the | |
| default is `normal`, i.e. show untracked files and directories. | |
| The possible options are: | |
| `no`:: Show no untracked files | |
| `normal`:: Shows untracked files and directories | |
| `all`:: Also shows individual files in untracked directories. | |
| All usual spellings for Boolean value `true` are taken as `normal` | |
| and `false` as `no`. | |
| The default can be changed using the `status.showUntrackedFiles` | |
| configuration variable documented in linkgit:git-config[1]. | |
| -- | |
| `-v`:: | |
| `--verbose`:: | |
| Show unified diff between the `HEAD` commit and what | |
| would be committed at the bottom of the commit message | |
| template to help the user describe the commit by reminding | |
| what changes the commit has. | |
| Note that this diff output doesn't have its | |
| lines prefixed with `#`. This diff will not be a part | |
| of the commit message. See the `commit.verbose` configuration | |
| variable in linkgit:git-config[1]. | |
| + | |
| If specified twice, show in addition the unified diff between | |
| what would be committed and the worktree files, i.e. the unstaged | |
| changes to tracked files. | |
| `-q`:: | |
| `--quiet`:: | |
| Suppress commit summary message. | |
| `--dry-run`:: | |
| Do not create a commit, but show a list of paths that are | |
| to be committed, paths with local changes that will be left | |
| uncommitted and paths that are untracked. | |
| `--status`:: | |
| Include the output of linkgit:git-status[1] in the commit | |
| message template when using an editor to prepare the commit | |
| message. Defaults to on, but can be used to override | |
| configuration variable `commit.status`. | |
| `--no-status`:: | |
| Do not include the output of linkgit:git-status[1] in the | |
| commit message template when using an editor to prepare the | |
| default commit message. | |
| `-S[<key-id>]`:: | |
| `--gpg-sign[=<key-id>]`:: | |
| `--no-gpg-sign`:: | |
| GPG-sign commits. The _<key-id>_ is optional and | |
| defaults to the committer identity; if specified, it must be | |
| stuck to the option without a space. `--no-gpg-sign` is useful to | |
| countermand both `commit.gpgSign` configuration variable, and | |
| earlier `--gpg-sign`. | |
| `--`:: | |
| Do not interpret any more arguments as options. | |
| `<pathspec>...`:: | |
| When _<pathspec>_ is given on the command line, commit the contents of | |
| the files that match the pathspec without recording the changes | |
| already added to the index. The contents of these files are also | |
| staged for the next commit on top of what have been staged before. | |
| + | |
| For more details, see the 'pathspec' entry in linkgit:gitglossary[7]. | |
| EXAMPLES | |
| -------- | |
| When recording your own work, the contents of modified files in | |
| your working tree are temporarily stored to a staging area | |
| called the "index" with `git add`. A file can be | |
| reverted back, only in the index but not in the working tree, | |
| to that of the last commit with `git restore --staged <file>`, | |
| which effectively reverts `git add` and prevents the changes to | |
| this file from participating in the next commit. After building | |
| the state to be committed incrementally with these commands, | |
| `git commit` (without any pathname parameter) is used to record what | |
| has been staged so far. This is the most basic form of the | |
| command. An example: | |
| ------------ | |
| $ edit hello.c | |
| $ git rm goodbye.c | |
| $ git add hello.c | |
| $ git commit | |
| ------------ | |
| Instead of staging files after each individual change, you can | |
| tell `git commit` to notice the changes to the files whose | |
| contents are tracked in | |
| your working tree and do corresponding `git add` and `git rm` | |
| for you. That is, this example does the same as the earlier | |
| example if there is no other change in your working tree: | |
| ------------ | |
| $ edit hello.c | |
| $ rm goodbye.c | |
| $ git commit -a | |
| ------------ | |
| The command `git commit -a` first looks at your working tree, | |
| notices that you have modified `hello.c` and removed `goodbye.c`, | |
| and performs necessary `git add` and `git rm` for you. | |
| After staging changes to many files, you can alter the order the | |
| changes are recorded in, by giving pathnames to `git commit`. | |
| When pathnames are given, the command makes a commit that | |
| only records the changes made to the named paths: | |
| ------------ | |
| $ edit hello.c hello.h | |
| $ git add hello.c hello.h | |
| $ edit Makefile | |
| $ git commit Makefile | |
| ------------ | |
| This makes a commit that records the modification to `Makefile`. | |
| The changes staged for `hello.c` and `hello.h` are not included | |
| in the resulting commit. However, their changes are not lost -- | |
| they are still staged and merely held back. After the above | |
| sequence, if you do: | |
| ------------ | |
| $ git commit | |
| ------------ | |
| this second commit would record the changes to `hello.c` and | |
| `hello.h` as expected. | |
| After a merge (initiated by `git merge` or `git pull`) stops | |
| because of conflicts, cleanly merged | |
| paths are already staged to be committed for you, and paths that | |
| conflicted are left in unmerged state. You would have to first | |
| check which paths are conflicting with `git status` | |
| and after fixing them manually in your working tree, you would | |
| stage the result as usual with `git add`: | |
| ------------ | |
| $ git status | grep unmerged | |
| unmerged: hello.c | |
| $ edit hello.c | |
| $ git add hello.c | |
| ------------ | |
| After resolving conflicts and staging the result, `git ls-files -u` | |
| would stop mentioning the conflicted path. When you are done, | |
| run `git commit` to finally record the merge: | |
| ------------ | |
| $ git commit | |
| ------------ | |
| As with the case to record your own changes, you can use `-a` | |
| option to save typing. One difference is that during a merge | |
| resolution, you cannot use `git commit` with pathnames to | |
| alter the order the changes are committed, because the merge | |
| should be recorded as a single commit. In fact, the command | |
| refuses to run when given pathnames (but see `-i` option). | |
| COMMIT INFORMATION | |
| ------------------ | |
| Author and committer information is taken from the following environment | |
| variables, if set: | |
| * `GIT_AUTHOR_NAME` | |
| * `GIT_AUTHOR_EMAIL` | |
| * `GIT_AUTHOR_DATE` | |
| * `GIT_COMMITTER_NAME` | |
| * `GIT_COMMITTER_EMAIL` | |
| * `GIT_COMMITTER_DATE` | |
| (nb "<", ">" and "\n"s are stripped) | |
| The author and committer names are by convention some form of a personal name | |
| (that is, the name by which other humans refer to you), although Git does not | |
| enforce or require any particular form. Arbitrary Unicode may be used, subject | |
| to the constraints listed above. This name has no effect on authentication; for | |
| that, see the `credential.username` variable in linkgit:git-config[1]. | |
| In case (some of) these environment variables are not set, the information | |
| is taken from the configuration items `user.name` and `user.email`, or, if not | |
| present, the environment variable `EMAIL`, or, if that is not set, | |
| system user name and the hostname used for outgoing mail (taken | |
| from `/etc/mailname` and falling back to the fully qualified hostname when | |
| that file does not exist). | |
| The `author.name` and `committer.name` and their corresponding email options | |
| override `user.name` and `user.email` if set and are overridden themselves by | |
| the environment variables. | |
| The typical usage is to set just the `user.name` and `user.email` variables; | |
| the other options are provided for more complex use cases. | |
| :git-commit: 1 | |
| include::date-formats.adoc[] | |
| DISCUSSION | |
| ---------- | |
| Though not required, it's a good idea to begin the commit message | |
| with a single short (no more than 50 characters) line summarizing the | |
| change, followed by a blank line and then a more thorough description. | |
| The text up to the first blank line in a commit message is treated | |
| as the commit title, and that title is used throughout Git. | |
| For example, linkgit:git-format-patch[1] turns a commit into email, and it uses | |
| the title on the Subject line and the rest of the commit in the body. | |
| include::i18n.adoc[] | |
| ENVIRONMENT AND CONFIGURATION VARIABLES | |
| --------------------------------------- | |
| The editor used to edit the commit log message will be chosen from the | |
| `GIT_EDITOR` environment variable, the `core.editor` configuration variable, the | |
| `VISUAL` environment variable, or the `EDITOR` environment variable (in that | |
| order). See linkgit:git-var[1] for details. | |
| include::includes/cmd-config-section-rest.adoc[] | |
| include::config/commit.adoc[] | |
| HOOKS | |
| ----- | |
| This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`, | |
| `post-commit` and `post-rewrite` hooks. See linkgit:githooks[5] for more | |
| information. | |
| FILES | |
| ----- | |
| `$GIT_DIR/COMMIT_EDITMSG`:: | |
| This file contains the commit message of a commit in progress. | |
| If `git commit` exits due to an error before creating a commit, | |
| any commit message that has been provided by the user (e.g., in | |
| an editor session) will be available in this file, but will be | |
| overwritten by the next invocation of `git commit`. | |
| SEE ALSO | |
| -------- | |
| linkgit:git-add[1], | |
| linkgit:git-rm[1], | |
| linkgit:git-mv[1], | |
| linkgit:git-merge[1], | |
| linkgit:git-commit-tree[1] | |
| GIT | |
| --- | |
| Part of the linkgit:git[1] suite |