git-commit -命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。
git commit
命令将所有通过 git add
暂存的文件内容在数据库中创建一个持久的快照,然后将当前分支上的分支指针移到其之上。
git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
[--dry-run] [(-c | -C | --fixup | --squash) <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]]
[-S[<keyid>]] [--] [<pathspec>…]
创建一个新的提交,其中包含索引的当前内容以及描述更改的给定日志消息。新提交是HEAD的直接子项,通常是当前分支的尖端,并且分支被更新为指向它(除非没有分支与工作树相关联,在这种情况下HEAD如git-checkout中所述被“分离”)。
可以通过多种方式指定要提交的内容:
在git commit命令之前使用git add对索引“添加”增量的更改(注意:修改后的文件的状态必须为“added”);
使用git rm 从工作树和索引中删除文件,然后再使用git commit命令;
通过将文件作为git commit命令的参数列出(没有--interactive或--patch开关),在这种情况下,提交将忽略索引中暂存的更改,而是记录列出文件的当前内容;
通过使用-a开关与git commit命令一起,来自动从所有已知文件(即索引中已列出的所有文件)中“添加”更改,并自动“删除”已从工作树中删除的索引中的文件 ,然后执行实际的提交;
通过使用--interactive或--patch开关与git commit命令一起,在完成操作之前,一 一决定除索引中的内容外,哪些文件或块应该是提交的一部分。
--dry-run选项可以通过提供相同的参数集(选项和路径)来获取上述任何内容在下一次提交中的摘要。
如果您提交了一个提交,然后立即发现错误,则可以使用git reset从中恢复。
-a --all
告诉commit命令自动暂存已修改和删除的文件,但是您未告知Git的新文件不受影响。
-p --patch
使用交互式补丁选择界面选择要提交的更改。
-C <commit>
--reuse-message=<commit>
获取现有的提交对象,并在创建提交时重用现有提交对象的日志消息和作者信息(包括时间戳)。
-c <commit>
--reedit-message=<commit>
与-C类似,但是-c会调用编辑器,以便用户可以进一步编辑提交消息。
--short
当进行dry-run时,以短格式short-format给出输出。
--branch
即使以短格式显示分支和跟踪信息。
-F <file>
--file=<file>
从给定文件中获取提交消息。 使用 - 从标准输入中读取消息。
--author=<author>
覆盖提交作者。 使用标准author <author@example.com>格式指定明确的作者。 否则,将<author>假定为一种模式,并用于搜索该作者的现有提交(即rev-list --all -i --author = <author>); 然后从发现的第一个此类提交中复制提交作者。
--date=<date>
覆盖提交中使用的作者日期。
-m <msg>
--message=<msg>
使用给定的<msg>作为提交消息。 如果给出了多个-m选项,则它们的值将串联为单独的段落。
-m选项与-c,-C和-F互斥。
-t <file>
--template=<file>
编辑提交消息时,请使用给定文件中的内容启动编辑器。 commit.template配置变量通常用于隐式地将此命令赋予命令。
此机制可用于希望引导参与者以什么顺序在消息中写些什么的项目。
如果用户退出编辑器而不编辑消息,则提交将中止。
当通过其他方式(如 -m或-F选项)发出消息时,这选项无效。
-e --edit
从-F选项指定的文件,-m命令行和 -C 提交对象获取的消息通常用作未修改的提交日志消息。
此选项使您可以进一步编辑从这些来源获取的消息。
--no-edit
使用选定的提交消息而无需启动编辑器。例如,git commit --amend --no-edit修改提交而不更改其提交消息。
--amend
通过创建新的提交来替换当前分支的尖端。
记录的树像往常一样准备好(包括-i和-o选项的作用以及显式pathspec),并且当未通过-m,-F,-c等命令行选项指定其他消息时,将原始提交的消息用作起点,而不是空消息。
新提交的父代和作者与当前提交的父代和作者相同(--reset-author选项可以强制执行此操作)。
它大致相当于:
$ git reset --soft HEAD^
$ ... do something else to come up with the right tree ...
$ git commit -c ORIG_HEAD
但可用于修改合并提交。
如果您修改已经发布的提交,则应该了解重写历史的含义。(See the "RECOVERING FROM UPSTREAM REBASE" section in git-rebase[1].)
-q --quiet
Suppress commit summary message.
--dry-run
不创建提交,而是显示要提交的路径的列表,本地更改的路径(将保留为未提交)和未跟踪的路径。
--status
使用编辑器准备提交消息时,请在提交消息模板中包含git-status [1]的输出。 默认值为on,但可用于覆盖配置变量commit.status。
--
Do not interpret any more arguments as options.
<pathspec>…
在命令行上给出pathspec时,提交与pathspec匹配的文件的内容,而不记录已添加到索引中的更改。
这些文件的内容也将在之前已进行的内容的基础上为下一次提交而进行。