Angular 规范其实是一种语义化的提交规范(Semantic Commit Messages),所谓语义化的提交规范包含以下内容:Commit Message 是语义化的:Commit Message 都会被归为一个有意义的类型,用来说明本次 commit 的类型。Commit Message 是规范化的:Commit Message 遵循预先定义好的规范,比如 Commit Message 格式固定、都属于某个类型,这些规范不仅可被开发者识别也可以被工具识别。
在 Angular 规范中,Commit Message 包含三个部分,分别是 Header、Body 和 Footer,格式如下:
其中,Header 是必需的,Body 和 Footer 可以省略。在以上规范中,必须用括号 () 括起来, [] 后必须紧跟冒号 ,冒号后必须紧跟空格,2 个空行也是必需的。在实际开发中,为了使 Commit Message 在 GitHub 或者其他 Git 工具上更加易读,我们往往会限制每行 message 的长度。根据需要,可以限制为 50/72/100 个字符,这里我将长度限制在 72 个字符以内(也有一些开发者会将长度限制为 100,你可根据需要自行选择)。
以下是一个符合 Angular 规范的 Commit Message:fix($compile): couple of unit tests for IE9# Please enter the Commit Message for your changes. Lines starting# with '#' will be ignored, and an empty message aborts the commit.# On branch master# Changes to be committed:# ...Older IEs serialize html uppercased, but IE9 does not...Would be better to expect case insensitive, unfortunately jasmine doesnot allow to user regexps for throw expectations.Closes #392Breaks foo.bar api, foo.baz should be used instead
Header 部分只有一行,包括三个字段:type(必选)、scope(可选)和 subject(必选)。我们先来说 type,它用来说明 commit 的类型。为了方便记忆,我把这些类型做了归纳,它们主要可以归为 Development 和 Production 共两类。它们的含义是:Development:这类修改一般是项目管理类的变更,不会影响最终用户和生产环境的代码,比如 CI 流程、构建方式等的。
Header
Header 部分只有一行,包括三个字段:type(必选)、scope(可选)和 subject(必选)。
接下来,我们说说 Header 的第二个字段 scope。scope 是用来说明 commit 的影响范围的,它必须是名词。显然,不同项目会有不同的 scope。在项目初期,我们可以设置一些粒度比较大的 scope,比如可以按组件名或者功能来设置 scope;后续,如果项目有变动或者有新功能,我们可以再用追加的方式添加新的 scope。主要是根据组件名和功能来设置的。例如,支持 某个模块,java如dao或者model等。
subject
subject 是 commit 的简短描述,必须以动词开头、使用现在时。比如,我们可以用 change,却不能用 changed 或 changes,而且这个动词的第一个字母必须是小写。通过这个动词,我们可以明确地知道 commit 所执行的操作。此外我们还要注意,subject 的结尾不能加英文句号。BodyHeader 对 commit 做了高度概括,可以方便我们查看 Commit Message。那我们如何知道具体做了哪些变更呢?答案就是,可以通过 Body 部分,它是对本次 commit 的更详细描述,是可选的。Body 部分可以分成多行,而且格式也比较自由。不过,和 Header 里的一样,它也要以动词开头,使用现在时。此外,它还必须要包括修改的动机,以及和跟上一版本相比的改动点。
body
通过 Body 部分,它是对本次 commit 的更详细描述,是可选的。Body 部分可以分成多行,而且格式也比较自由。不过,和 Header 里的一样,它也要以动词开头,使用现在时。此外,它还必须要包括修改的动机,以及和跟上一版本相比的改动点。
合并提交
合并提交,就是将多个 commit 合并为一个 commit 提交。这里,我建议你把新的 commit 合并到主干时,只保留 2~3 个 commit 记录。那具体怎么做呢?在 Git 中,我们主要使用 git rebase 命令来合并。git rebase 也是我们日后开发需要经常使用的一个命令,所以我们一定要掌握好它的使用方法。git rebase 命令介绍
eg:
git项目add了三个文件,对应下图的commit信息
现在要将以feat开头的commit合并为一个,commit ID为cce4ff3为开始,父ID为20c3aae.
执行git rebase -i 20c3aae
需要合并的 3 个 commit,都执行 squash 操作,如下图所示:
修改完成后执行:wq 保存,会跳转到一个新的交互页面,在该页面,我们可以编辑 Commit Message,编辑后的内容如下图所示:
修改完后wq保存。 git rebase -i 这里的一定要是需要合并 commit 中最旧 commit 的父 commit ID
检查合并是否成功执行 git log --oneline
三个合并为一个了
修改 Commit Message
git commit --amend:修改最近一次 commit 的 message
git rebase -i:修改某次 commit 的 message
git commit --amend 比较简单,主要是修改最近一次commit的值,执行后修改保存即可。
git rebase -i 修改的 Commit Message 不是最近一次的 Commit Message,可以通过 git rebase -i <父 commit ID>命令来修改。比如
修改add find 变为 find add, 执行 git rebase -i c730f8e 输入后将pick变为r,wq保存,后进入另一个页面,修改信息,保存后结果如下:
结果已经改变。