commit
TIP
每次使用git commit
命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id
,在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset
的组合命令回到这里
创建一个新的提交,其中包含索引的当前内容以及描述更改的给定日志消息。新提交是HEAD的直接子项,通常是当前分支的尖端,并且分支被更新为指向它(除非没有分支与工作树相关联,在这种情况下,HEAD是"分离的")
实例
提交暂存区到仓库区
- git commit -m [message]
提交暂存区的指定文件到仓库区
- git commit [file1] [file2] ... -m [message]
提交工作区自上次commit之后的变化,直接到仓库区
- git commit -a
提交时显示所有diff信息
- git commit -v
使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息
- git commit --amend -m [message]
重做上一次commit,并包括指定文件的新变化
- git commit --amend [file1] [file2] ...
跳过验证继续提交
- git commit --no-verify
修改提交而不更改其提交消息。
- git commit --amend --no-edit
选项
- -m <msg>,--message=<msg>
-
-m
参数表示可以直接输入后面的"message",如果不加-m
参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个messag -
该
-m
与-c
,-C
,和-F
是互相排斥的 。 - -a,--all
-
可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过
git add
添加到暂存区 -
注意:新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的,但是提交过一次或者被git管理的文件可以用
-a
- --amend
-
追加提交,它可以在不增加一个新的
commit-id
的情况下将新修改的代码追加到前一次的commit-id
中, - -p,--patch
-
使用交互式补丁选择界面来选择要提交的更改
- -C <commit>,--reuse-message=<commit>
-
使用现有的提交对象,并在创建提交时重用日志信息和作者信息(包括时间戳)。
- -c <commit>,--reedit-message=<commit>
-
与
-C
相似,但与-c
一起调用编辑器,以便用户可以进一步编辑提交消息。 - --fixup=[(amend|reword):]<commit>
-
当与
git rebase --autosquash
一起应用时,创建一个“修复”<commit>
的新提交。普通--fixup=<commit>
创建一个“修复!” commit 更改<commit>
的内容但不更改其日志消息。 - --squash=<commit>
-
构造一个与
rebase --autosquash
一起使用的提交消息。提交消息主题行是从具有“ squash!”前缀的指定提交中提取的。可以与其他提交消息选项(-m
/-c
/-C
/-F
)一起使用 - --reset-author
-
当与-C/-c/–amend选项一起使用时,或者在冲突的cherry-pick之后提交时,声明提交结果的作者身份现在属于提交者。这也会更新作者的时间戳。
- --short
-
当
dry-run
,以短格式给出输出 - --branch
-
即使是短格式,也能显示分支和跟踪信息。
- --porcelain
-
When doing a
dry-run
, give the output in a porcelain-ready format. - --long
-
When doing a
dry-run
, give the output in the long-format - -z,--null
-
当显示
short
或porcelain
状态输出时,逐字打印文件名,并以NUL(而不是LF)终止输入。如果未给出格式,则表示--porcelain
输出格式 - -F <file>,--file=<file>
-
从给定文件中获取提交消息。使用
-
从标准输入中读取消息。 - --author=<author>
-
覆盖提交作者
- --date=<date>
-
覆盖提交中使用的作者日期。
- -t <file>,--template=<file>
-
编辑提交消息时,请使用给定文件中的内容启动编辑器
- -s,--signoff,--no-signoff
-
在提交日志消息的末尾添加提交者的
Signed-off-by
-
--no-signoff
选项可以用来反制命令行上的早期-signoff
选项。 - --trailer <token>[(=|:)<value>]
-
指定应作为尾部应用的 (
<token>
,<value>
) 对。 - -n,--[no-]verify
-
默认情况下,会运行
pre-commit
和commit-msg
挂钩。当给出任何--no-verify
或-n
时,这些将被绕过 - --allow-empty
-
通常记录一个与唯一父提交树完全相同的提交是一个错误,该命令可以防止你进行这样的提交。这个选项绕过了安全问题,主要用于国外SCM接口脚本。
- --allow-empty-message
-
像
--allow-empty
一样,此命令主要供外部SCM接口脚本使用。它允许您使用空的提交消息创建提交,而无需使用git commit-tree
之类的探测命令。 - --cleanup=<mode>
-
此选项确定在提交之前应如何清除提供的提交消息。
<mode>
可以是: -
strip
剥离前导和尾部空行、尾部空白、注释和折叠连续的空行。
-
whitespace
除未删除#commentary之外,其他与 strip 相同。
-
verbatim
完全不要改变信息。
-
scissors
与 whitespace 相同,不同之处在于,如果要编辑消息,则以下一行中的所有内容(包括以下内容)都将被截断。可以使用core.commentChar自定义“ # ”。
-
default
如果要编辑消息,则与 strip 相同。否则为 whitespace 。
-
可以通过
commit.cleanup
配置变量更改默认值 - -e,--edit
-
从
-F
的文件,从-m
的命令行和从-C
的提交对象获取的消息通常用作未修改的提交日志消息。此选项使您可以进一步编辑从这些来源获取的消息。 - --no-edit
-
使用选定的提交消息而不启动编辑器
- --no-post-rewrite
-
绕过改写后的钩子。
- -i,--include
-
在提交之前,先将命令行上给出的路径内容也进行缓存。这通常不是你想要的,除非你要完成一个冲突的合并。
- -o,--only
-
通过获取在命令行上指定的路径的更新的工作树内容来提交,而不考虑为其他路径暂存的任何内容
- --pathspec-from-file=<file>
-
Pathspec在
<file>
中而不是命令行args中传递 - --pathspec-file-nul
-
仅对
--pathspec-from-file
有意义。Pathspec元素用NUL字符分隔,所有其他字符按字面意义使用(包括换行符和引号)。 - -u[<mode>],--untracked-files[=<mode>]
-
显示未被跟踪的文件。
-
mode参数是可选的(默认为
all
),用于指定未跟踪文件的处理;当不使用-u
时,默认值为normal
,即显示未跟踪的文件和目录。 -
可能的选择是:
-
no
-不显示未跟踪的文件
-
normal
-显示未跟踪的文件和目录
-
all
-还显示未跟踪目录中的单个文件。
-
可以使用
git config
中记录的status.showUntrackedFiles
配置变量来更改默认值。 - -v,--verbose
-
在提交消息模板的底部显示 HEAD 提交和将提交的内容之间的统一差异,以通过提醒提交有哪些更改来帮助用户描述提交。请注意,此差异输出的行没有以 # 为前缀。
-
如果指定了两次,则另外显示将提交的内容和工作树文件之间的统一差异,即对跟踪文件的非阶段性修改。
- -q,--quiet
-
抑制提交摘要信息。
- --dry-run
-
不要创建提交,而是显示要提交的路径列表,有局部变化的路径将不提交,未跟踪的路径。
- --status
-
使用编辑器准备提交消息时,请将
git status
输出包括在提交消息模板中。默认值为on
,但可用于覆盖配置变量commit.status
。 - --no-status
-
使用编辑器准备默认提交消息时,请勿在提交消息模板中包括
git status
的输出。 - -S[<keyid>],--gpg-sign[=
],--no-gpg-sign -
GPG签名提交。所述 keyid 的参数是可选的,并且默认为提交者身份; 如果指定,则必须将其固定在选项中,且不能留空格。
--no-gpg-sign
有助于commit.gpgSign
配置变量和更早的--gpg-sign
。