6 git-commit - Record changes to the repository
 
  11 'git commit' [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
 
  12            [--dry-run] [(-c | -C | --fixup | --squash) <commit>]
 
  13            [-F <file> | -m <msg>] [--reset-author] [--allow-empty]
 
  14            [--allow-empty-message] [--no-verify] [-e] [--author=<author>]
 
  15            [--date=<date>] [--cleanup=<mode>] [--status | --no-status]
 
  16            [-i | -o] [--] [<file>...]
 
  20 Stores the current contents of the index in a new commit along
 
  21 with a log message from the user describing the changes.
 
  23 The content to be added can be specified in several ways:
 
  25 1. by using 'git add' to incrementally "add" changes to the
 
  26    index before using the 'commit' command (Note: even modified
 
  27    files must be "added");
 
  29 2. by using 'git rm' to remove files from the working tree
 
  30    and the index, again before using the 'commit' command;
 
  32 3. by listing files as arguments to the 'commit' command, in which
 
  33    case the commit will ignore changes staged in the index, and instead
 
  34    record the current content of the listed files (which must already
 
  37 4. by using the -a switch with the 'commit' command to automatically
 
  38    "add" changes from all known files (i.e. all files that are already
 
  39    listed in the index) and to automatically "rm" files in the index
 
  40    that have been removed from the working tree, and then perform the
 
  43 5. by using the --interactive or --patch switches with the 'commit' command
 
  44    to decide one by one which files or hunks should be part of the commit,
 
  45    before finalizing the operation. See the ``Interactive Mode`` section of
 
  46    linkgit:git-add[1] to learn how to operate these modes.
 
  48 The `--dry-run` option can be used to obtain a
 
  49 summary of what is included by any of the above for the next
 
  50 commit by giving the same set of parameters (options and paths).
 
  52 If you make a commit and then find a mistake immediately after
 
  53 that, you can recover from it with 'git reset'.
 
  60         Tell the command to automatically stage files that have
 
  61         been modified and deleted, but new files you have not
 
  62         told git about are not affected.
 
  66         Use the interactive patch selection interface to chose
 
  67         which changes to commit. See linkgit:git-add[1] for
 
  71 --reuse-message=<commit>::
 
  72         Take an existing commit object, and reuse the log message
 
  73         and the authorship information (including the timestamp)
 
  74         when creating the commit.
 
  77 --reedit-message=<commit>::
 
  78         Like '-C', but with '-c' the editor is invoked, so that
 
  79         the user can further edit the commit message.
 
  82         Construct a commit message for use with `rebase --autosquash`.
 
  83         The commit message will be the subject line from the specified
 
  84         commit with a prefix of "fixup! ".  See linkgit:git-rebase[1]
 
  88         Construct a commit message for use with `rebase --autosquash`.
 
  89         The commit message subject line is taken from the specified
 
  90         commit with a prefix of "squash! ".  Can be used with additional
 
  91         commit message options (`-m`/`-c`/`-C`/`-F`). See
 
  92         linkgit:git-rebase[1] for details.
 
  95         When used with -C/-c/--amend options, or when committing after a
 
  96         a conflicting cherry-pick, declare that the authorship of the
 
  97         resulting commit now belongs of the committer. This also renews
 
 101         When doing a dry-run, give the output in the short-format. See
 
 102         linkgit:git-status[1] for details. Implies `--dry-run`.
 
 105         When doing a dry-run, give the output in a porcelain-ready
 
 106         format. See linkgit:git-status[1] for details. Implies
 
 110         When showing `short` or `porcelain` status output, terminate
 
 111         entries in the status output with NUL, instead of LF. If no
 
 112         format is given, implies the `--porcelain` output format.
 
 116         Take the commit message from the given file.  Use '-' to
 
 117         read the message from the standard input.
 
 120         Override the commit author. Specify an explicit author using the
 
 121         standard `A U Thor <author@example.com>` format. Otherwise <author>
 
 122         is assumed to be a pattern and is used to search for an existing
 
 123         commit by that author (i.e. rev-list --all -i --author=<author>);
 
 124         the commit author is then copied from the first such commit found.
 
 127         Override the author date used in the commit.
 
 131         Use the given <msg> as the commit message.
 
 135         Use the contents of the given file as the initial version
 
 136         of the commit message. The editor is invoked and you can
 
 137         make subsequent changes. If a message is specified using
 
 138         the `-m` or `-F` options, this option has no effect. This
 
 139         overrides the `commit.template` configuration variable.
 
 143         Add Signed-off-by line by the committer at the end of the commit
 
 148         This option bypasses the pre-commit and commit-msg hooks.
 
 149         See also linkgit:githooks[5].
 
 152         Usually recording a commit that has the exact same tree as its
 
 153         sole parent commit is a mistake, and the command prevents you
 
 154         from making such a commit.  This option bypasses the safety, and
 
 155         is primarily for use by foreign SCM interface scripts.
 
 157 --allow-empty-message::
 
 158        Like --allow-empty this command is primarily for use by foreign
 
 159        SCM interface scripts. It allows you to create a commit with an
 
 160        empty commit message without using plumbing commands like
 
 161        linkgit:git-commit-tree[1].
 
 164         This option sets how the commit message is cleaned up.
 
 165         The  '<mode>' can be one of 'verbatim', 'whitespace', 'strip',
 
 166         and 'default'. The 'default' mode will strip leading and
 
 167         trailing empty lines and #commentary from the commit message
 
 168         only if the message is to be edited. Otherwise only whitespace
 
 169         removed. The 'verbatim' mode does not change message at all,
 
 170         'whitespace' removes just leading/trailing whitespace lines
 
 171         and 'strip' removes both whitespace and commentary.
 
 175         The message taken from file with `-F`, command line with
 
 176         `-m`, and from file with `-C` are usually used as the
 
 177         commit log message unmodified.  This option lets you
 
 178         further edit the message taken from these sources.
 
 181         Used to amend the tip of the current branch. Prepare the tree
 
 182         object you would want to replace the latest commit as usual
 
 183         (this includes the usual -i/-o and explicit paths), and the
 
 184         commit log editor is seeded with the commit message from the
 
 185         tip of the current branch. The commit you create replaces the
 
 186         current tip -- if it was a merge, it will have the parents of
 
 187         the current tip as parents -- so the current top commit is
 
 191 It is a rough equivalent for:
 
 193         $ git reset --soft HEAD^
 
 194         $ ... do something else to come up with the right tree ...
 
 195         $ git commit -c ORIG_HEAD
 
 198 but can be used to amend a merge commit.
 
 201 You should understand the implications of rewriting history if you
 
 202 amend a commit that has already been published.  (See the "RECOVERING
 
 203 FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].)
 
 207         Before making a commit out of staged contents so far,
 
 208         stage the contents of paths given on the command line
 
 209         as well.  This is usually not what you want unless you
 
 210         are concluding a conflicted merge.
 
 214         Make a commit only from the paths specified on the
 
 215         command line, disregarding any contents that have been
 
 216         staged so far. This is the default mode of operation of
 
 217         'git commit' if any paths are given on the command line,
 
 218         in which case this option can be omitted.
 
 219         If this option is specified together with '--amend', then
 
 220         no paths need to be specified, which can be used to amend
 
 221         the last commit without committing changes that have
 
 225 --untracked-files[=<mode>]::
 
 226         Show untracked files.
 
 228 The mode parameter is optional (defaults to 'all'), and is used to
 
 229 specify the handling of untracked files; when -u is not used, the
 
 230 default is 'normal', i.e. show untracked files and directories.
 
 232 The possible options are:
 
 234         - 'no'     - Show no untracked files
 
 235         - 'normal' - Shows untracked files and directories
 
 236         - 'all'    - Also shows individual files in untracked directories.
 
 238 The default can be changed using the status.showUntrackedFiles
 
 239 configuration variable documented in linkgit:git-config[1].
 
 243         Show unified diff between the HEAD commit and what
 
 244         would be committed at the bottom of the commit message
 
 245         template.  Note that this diff output doesn't have its
 
 246         lines prefixed with '#'.
 
 250         Suppress commit summary message.
 
 253         Do not create a commit, but show a list of paths that are
 
 254         to be committed, paths with local changes that will be left
 
 255         uncommitted and paths that are untracked.
 
 258         Include the output of linkgit:git-status[1] in the commit
 
 259         message template when using an editor to prepare the commit
 
 260         message.  Defaults to on, but can be used to override
 
 261         configuration variable commit.status.
 
 264         Do not include the output of linkgit:git-status[1] in the
 
 265         commit message template when using an editor to prepare the
 
 266         default commit message.
 
 269         Do not interpret any more arguments as options.
 
 272         When files are given on the command line, the command
 
 273         commits the contents of the named files, without
 
 274         recording the changes already staged.  The contents of
 
 275         these files are also staged for the next commit on top
 
 276         of what have been staged before.
 
 279 include::date-formats.txt[]
 
 283 When recording your own work, the contents of modified files in
 
 284 your working tree are temporarily stored to a staging area
 
 285 called the "index" with 'git add'.  A file can be
 
 286 reverted back, only in the index but not in the working tree,
 
 287 to that of the last commit with `git reset HEAD \-- <file>`,
 
 288 which effectively reverts 'git add' and prevents the changes to
 
 289 this file from participating in the next commit.  After building
 
 290 the state to be committed incrementally with these commands,
 
 291 `git commit` (without any pathname parameter) is used to record what
 
 292 has been staged so far.  This is the most basic form of the
 
 302 Instead of staging files after each individual change, you can
 
 303 tell `git commit` to notice the changes to the files whose
 
 304 contents are tracked in
 
 305 your working tree and do corresponding `git add` and `git rm`
 
 306 for you.  That is, this example does the same as the earlier
 
 307 example if there is no other change in your working tree:
 
 315 The command `git commit -a` first looks at your working tree,
 
 316 notices that you have modified hello.c and removed goodbye.c,
 
 317 and performs necessary `git add` and `git rm` for you.
 
 319 After staging changes to many files, you can alter the order the
 
 320 changes are recorded in, by giving pathnames to `git commit`.
 
 321 When pathnames are given, the command makes a commit that
 
 322 only records the changes made to the named paths:
 
 325 $ edit hello.c hello.h
 
 326 $ git add hello.c hello.h
 
 328 $ git commit Makefile
 
 331 This makes a commit that records the modification to `Makefile`.
 
 332 The changes staged for `hello.c` and `hello.h` are not included
 
 333 in the resulting commit.  However, their changes are not lost --
 
 334 they are still staged and merely held back.  After the above
 
 341 this second commit would record the changes to `hello.c` and
 
 342 `hello.h` as expected.
 
 344 After a merge (initiated by 'git merge' or 'git pull') stops
 
 345 because of conflicts, cleanly merged
 
 346 paths are already staged to be committed for you, and paths that
 
 347 conflicted are left in unmerged state.  You would have to first
 
 348 check which paths are conflicting with 'git status'
 
 349 and after fixing them manually in your working tree, you would
 
 350 stage the result as usual with 'git add':
 
 353 $ git status | grep unmerged
 
 359 After resolving conflicts and staging the result, `git ls-files -u`
 
 360 would stop mentioning the conflicted path.  When you are done,
 
 361 run `git commit` to finally record the merge:
 
 367 As with the case to record your own changes, you can use `-a`
 
 368 option to save typing.  One difference is that during a merge
 
 369 resolution, you cannot use `git commit` with pathnames to
 
 370 alter the order the changes are committed, because the merge
 
 371 should be recorded as a single commit.  In fact, the command
 
 372 refuses to run when given pathnames (but see `-i` option).
 
 378 Though not required, it's a good idea to begin the commit message
 
 379 with a single short (less than 50 character) line summarizing the
 
 380 change, followed by a blank line and then a more thorough description.
 
 381 Tools that turn commits into email, for example, use the first line
 
 382 on the Subject: line and the rest of the commit in the body.
 
 386 ENVIRONMENT AND CONFIGURATION VARIABLES
 
 387 ---------------------------------------
 
 388 The editor used to edit the commit log message will be chosen from the
 
 389 GIT_EDITOR environment variable, the core.editor configuration variable, the
 
 390 VISUAL environment variable, or the EDITOR environment variable (in that
 
 391 order).  See linkgit:git-var[1] for details.
 
 395 This command can run `commit-msg`, `prepare-commit-msg`, `pre-commit`,
 
 396 and `post-commit` hooks.  See linkgit:githooks[5] for more
 
 405 linkgit:git-merge[1],
 
 406 linkgit:git-commit-tree[1]
 
 410 Part of the linkgit:git[1] suite