使用git commit 将索引中的更新文件提交到Git存储库中
1 git commit 概要
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
没有与分支关联则会显示HEAD
是"detached"的。
-
[-a, --all]
这个选项可以跳过git add
操作而直接将已修改和删除的文件进行提交,但是不会自动提交未跟踪的文件。 -
[-p, --patch]
同样的可以跳过git add
直接进行提交,但是使用交互式的接口来选择哪一些块是需要被提交的。 -
[-C <commit>, --reuse-message=<commit>]
使用一个已存在的commit来创建本次提交信息,包含时间戳信息。
-
-c <commit>, --reedit-message=<commit>
和-C
类似,不过可以启动一个编辑器来编辑本次提交信息。 -
[--fixup=<commit>]
构建一个提交信息用于后续执行rebase --autosquash
命令。该命令会为提交信息添加一个"fixup! "
前缀,用于后续rebase --autosquash
读取。 -
[--squash=<commit>]
和--fixup=<commit>
类似,添加一个"squash! "
前缀,后续rebase --autosquash
命令使用,可以添加-m
,-c
,-C
,-F
选项用于附加更多的提交信息。 -
[--reset-author]
当和选项-c
,-C
,--amend
一起使用时,或者在cherry-pick
冲突提交后,声明最终提交的作者现在属于提交者,这也会更新作者的时间戳。 -
[--short]
当在使用dry-run
时,以短格式形式给出输出。 -
[--branch]
显示分支和跟踪信息。 -
[--porcelain]
当在使用dry-run
时,给出一个简单的修改信息类似于这样的:$ git commit --dry-run --procelain -m "test" A test.c
-
[--long]
当在使用dry-run
时,给出较长格式的输出。 -
[-z, --null]
当显示--short
或--long
输出时,使用NUL
字符结尾而不是LF
。 -
[--author=<author>]
覆盖提交作者。使用标准的A
U
<author@example.com>
格式。否则作者将是已存在提交中发现的第一个提交作者。 -
[--date=<date>]
覆盖在这个提交中的作者时间戳 -
[-m <msg>, --message=<msg>]
使用给定的msg
作为提交信息。如果-m
选型被多次给出,那么他们将会被连接成独立的段。
-m
和-C
,-c
,-F
是互斥的。 -
[-t <file>, --template=<file>]
当编辑提交信息时,启动一个编辑器,并使用给定的文件作为提交模板,不给出<file>
时默认使用配置变量中comit.template
给出的模板。如果用户没有编辑文本推出则提交会中止。如果使用-m
或者-F
时,这个选项不起作用。 -
[-s, --signoff]
在提交信息的最后添加一个Signed-off-by
的提交者信息一行。 -
[-n, --no-verify]
这个选项绕过pre-commit
和commit-msg
的钩子,不讲述钩子相关功能,跳过介绍。 -
[--allow-empty]
通常记录一个与它的唯一父提交具有完全相同的树的提交是错误的,这个命令用于阻止这样的提交。选项绕过了安全性,主要用于外部脚本使用。 -
[--allow-empty-message]
用于可以创建带有空提交消息的提交,主要还是外部脚本使用。 -
[--cleanup=<mode>]
用于在提交信息签清理提交信息。有如下<mode>
:strip
去掉头部和尾部的空行,尾部的空白,注释和折叠连续的空行。whitespace
和strip
类似,但是没有去除注释。verbatim
完全不更改提交消息scissors
如果消息被编辑,类似于whitespace
,不过当找到下面类似的注释将被截断。#
可以自定义使用配置变量core.commentChar
:# ------------------------ >8 ------------------------
default
如果消息被编辑则类似于strip
,否则类似于whitespace
。
default
可以通过配置变量commit.cleanup
来改变。 -
[-e, --edit]
提交消息来自于-F
文件,命令行-m
,或者-C
的提交对象里,这些通常是被修改的提交信息,使用此选项允许你进一步启动一个编辑器来编辑这些信息。 -
[--no-edit]
在不启动编辑器的情况下使用选定的提交信息。比如git commit --amend --no-edit
则可以在修改了一个提交后不改变提交信息再次重新提交。 -
[--amend]
通过创建一个新的提交来替换当前分支顶端的提交。
当然需要注意,如果提交已经发布出去,则最好理解修改提交历史的含义。 -
[--no-post-rewrite]
绕过post-rewrite
钩子。 -
[-o, --only]
用于获取指定路径上已添加到索引的更新内容,忽略其他路径已暂存的更新内容,并提交到Git存储库。 -
[--pathspec-from-file=<file>]
由<file>
传入需要提交的更新内容,而不是命令行。如果<file>
是精准的,则标准输入被使用接收提交信息。以LF
和CRLF
分隔内容,可以使用配置变量core.quotePath
引用解释。 -
[--pathspec-file-nul]
仅和--pathspec-from-file=<file>
一起使用,只使用NUL字符分隔,其他字符按照字面意思处理。 -
[-u[<mode>], --untracked-files[=<mode>]]
显示未跟踪的文件。
<mode>
是可选的,默认是all
,用于指定对未跟踪文件的处理,当不使用-u
选项时,默认是normal
,即显示未跟踪的文件和目录。
可能选项如下:no
- 不显示未跟踪文件。normal
- 显示未跟踪文件和目录。all
- 还显示未跟踪目录中的单个文件。
-
[-v, --verbose]
显示更详细的文件提交后变化差异。 -
[-q, --quiet]
抑制提交信息打印 -
[--dry-run]
不创建真的提交,显示提交会发生些什么。 -
[--status]
当使用编辑器准备提交时,在提交模板中包含git status
的输出,默认是开的,但是可以用于覆盖配置变量commit.status
。 -
[--no-status]
和[--status]
相反。 -
[-S[<keyid>], --gpg-sign[=<keyid>]]
使用GPG-sign
提交。 -
[--no-gpg-sign]
当配置了配置变量commit.gpgsign
会强制每个提交都被签名,此选项取消签名。 -
[--]
无作用,为了区分参数和选项 -
[<pathspec>...]
当在命令行给出<pathspec>
时,提交匹配给出的文件内容,而不是已经记录添加到索引中的更改。