该指南是你在项目进行过程中所需遵守的官方指南。优达学城的评估人员会根据该指南为你的项目打分。在前端网页开发的世界中,有很“最佳”样式供你选择。因此,为了减少学生在项目过程中因选择何种样式所产生的困惑,我们强烈建议所有学生在其项目中遵循这个样式指南。
仅使用小写。
所有代码均使用小写,该规则适用于 HTML 元素名、属性和属性值(文本/ CDATA 除外)。
不推荐:
xxxxxxxxxx
<A HREF="/" class="HOME">主页</A>
推荐:
xxxxxxxxxx
<a href="/" class="home">主页</a>
删除行尾空格。
行尾空格属于多余的符号,会使 diff 更加难以阅读。
不推荐:
xxxxxxxxxx
<p>什么?</p>__
推荐:
xxxxxxxxxx
<p>一往情深深几许?深山夕照深秋雨。</p>
如果使用 Sublime Text,你可在用户设置(User Settings)JSON 文件(可在文本编辑器的菜单中找到)中添加以下代码,每当你以此方法储存文件时,去除行尾空格操作便会自动完成:
xxxxxxxxxx
"trim_trailing_white_space_on_save": true
整个文件中的缩进应保持前后一致,使用 Tab、2个空格或4个空格都可以,但需保持前后一致。
使用 UTF-8(无 BOM)。
确保你的编辑器将没有字节顺序标记的 UTF-8 用作字符编码。在 HTML 模板中设置编码并用 <meta charset="utf-8">
记录。
在可行和必要时,对代码进行注释。
用注释解释代码的覆盖范围、目的和作用以及使用和选择各解决方案的原因。
用 TODO:
标注待办事项和任务项
仅用关键词 TODO 标注待办事项,不要使用 @@
等其他格式的字样。在任务项前加冒号,如: TODO: 待办任务
推荐:
x<!-- TODO: 对出下联 -->
<ul>
<li>风吹云,云随风,风云变幻</li>
</ul>
使用 HTML5 。
所有 HTML 文件均应使用 HTML5 ( HTML 语法): <!DOCTYPE html>
不要结束自结束元素,即编写 <br>
,而不是 <br />
。
使用有效的 HTML。
使用有效的 HTML 是可测量的基准质量,可确保 HTML的合理使用并有助于了解技术要求和限制。
不推荐:
xxxxxxxxxx
<title>页面标题</title>
<article>这是一篇文章。
推荐:
xxxxxxxxxx
<html>
<head>
<meta charset="utf-8">
<title>一代人</title>
</head>
<body>
<article>黑夜给了我黑色的眼睛,我却用它来寻找光明。。</article>
</body>
</html>
根据目的使用 HTML 。
根据元素的预期作用使用元素。例如,针对标题使用标题元素,针对段落使用 p 元素,针对锚点使用 a 元素等。根据目的使用HTML 对提高可访问性、再利用程度和代码效率十分重要。
不推荐:
xxxxxxxxxx
<div onclick="goToRecommendations();">All recommendations</div>
推荐:
xxxxxxxxxx
<a href="recommendations/">All recommendations</a>
为多媒体设置备用内容。
确保为图片、视频或通过画布呈现的动画对象等多媒体提供其他访问方式。对于图片而言,使用有意义的 Alt 文本。对于视频,使用音频转述资料和字幕(如有)。
为方便访问,需提供备用内容,若没有 alt
属性,盲人用户将难以辨别图片的内容,其他用户也可能无法理解视频或音频的内容。
针对具有会引入冗余的 alt
属性的图片和无法立即使用 CSS 的装饰性图片,使用空备用内容,即 alt=""
。
不推荐:
xxxxxxxxxx
<img src="udacity.png">
推荐:
xxxxxxxxxx
<img src="udacity.png" alt="Udacity logo">
将结构、描述和行为相互分离。
将结构(标记)、描述(样式)和行为(脚本设计)严格分开,将三者间可能发生的相互作用降至最低。
也就是说,确保文件和模板仅含有 只用于结构目的 HTML 。将所有描述性事物移至样式表,将所有行为性事物移至脚本。此外,尽可能少地连接文件和模板中的样式表和脚本,以便使接触面积最小化。
将结构、描述和行为相互分离对维护十分重要。相比对样式表和脚本进行更新,更改 HTML 文件和模板的成本往往更高。
不要使用实体引用。
若文件、编辑器和小组之间均使用同样的编码( UTF-8 ),则无需使用 — 、” 和 or ☺ 等实体引用。
只有 HTML 中含有特殊意义的字符(如 < 和 &)以及控制和“隐式”字符除外。
不推荐:
xxxxxxxxxx
欧元的货币符号是: “&eur;”
推荐:
xxxxxxxxxx
欧元的货币符号是: “€”
忽略样式表和脚本的 type 属性。
不要针对样式表和脚本使用 type 属性。因为 HTML 已经默认设置了 text/css
和 text/javascript
,所以在此类语境中无需设置 type 属性。
在老式浏览器中,也可以安全进行此项操作。
不推荐:
xxxxxxxxxx
<link rel="stylesheet" type="text/css" href="css/style.css">
<script src="js/app.js" type="text/javascript"></script>
推荐:
xxxxxxxxxx
<link rel="stylesheet" href="css/style.css">
<script src="js/app.js"></script>
所有代码块、列表和表元素均需另起一行,所有子元素均需缩进。
每一个代码块、列表和表元素均需另起一行,与元素的样式相独立(因为 CSS 允许元素在每一个显示属性中担任不同的角色)。
此外,代码块、列表和表元素的子元素也需进行缩进(如果你遇到列表项间存在空白的问题,可以将所有 li
元素放置在一行)。
推荐:
xxxxxxxxxx
<blockquote>
<p>啊!<em>船长!</em>我的船长!</p>
</blockquote>
<ul>
<li>啊.船长,我的船长!我们艰苦的航程已经终结,</li>
<li>这只船安然渡过了一切风浪,我们寻求的奖赏已经获得。</li>
<li>港口在望,我听见钟声在响,人们都在欢呼,</li>
<li>目迎着我们的船从容返航,它显得威严而英武。</li>
<li>可是,啊,心啊!心啊!心啊!</li>
<li>啊.殷红的鲜血长流,</li>
<li>在甲板上,那里躺着我的船长,</li>
<li>他已倒下,已死去,已冷却。</li>
<li>啊,船长,我的船长!起来吧,起来听听这钟声,</li>
<li>起来,——旌旗正为你招展——军号正为你发出颤音。</li>
<li>为你.送来了这些花束和花环。</li>
<li>为你,熙攘的群众在呼唤,转动着多少殷切的脸。</li>
<li>这里,船长!亲爱的父亲!</li>
<li>你头颅下边是我的手臂!</li>
<li>在甲板上像是在一场梦里,</li>
<li>你已倒下,已死去,已冷却。</li>
<li>我们的船长不作回答,他的双唇惨白而寂静,</li>
<li>我的父亲不能感觉我的手臂,他已没有脉息、没有知觉,</li>
<li>我们的船已安全抛锚碇泊,已经结束了它的航程,</li>
<li>胜利的船从险恶的旅途归来,我们寻求的已赢得手中。</li>
<li>欢呼吧,啊,海岸!轰鸣,啊,洪钟!</li>
<li>可是,我却轻移悲伤的步履,</li>
<li>在甲板上,那里躺着我的船长,</li>
<li>他已倒下,已死去,已冷却。</li>
</ul>
<table>
<thead>
<tr>
<th scope="col">姓名</th>
<th scope="col">职业</th>
</tr>
</thead>
<tbody>
<tr>
<td>瓦尔特·惠特曼</td>
<td>诗人</td>
</tr>
</tbody>
</table>
在引用属性值时,使用双引号。
不推荐:
xxxxxxxxxx
<a href='login/' class='btn btn-secondary'>登陆</a>
推荐:
<a href="login/" class="btn btn-secondary">登陆</a>
该指南是你在项目进行过程中所需遵守的官方指南。优达学城的评估人员会根据该指南为你的项目打分。在前端网页开发的世界中,有很"最佳"样式供你选择。因此,为了减少学生在项目过程中因选择何种样式所产生的困惑,我们强烈建议所有学生在其项目中遵循这个样式指南。
仅使用小写。
所有代码均使用小写,该规则适用于 CSS 选择符、属性和属性值(字符串除外)。
不推荐:
color: #E5E5E5;
推荐:
color: #e5e5e5;
删除行尾空格。
行尾空格属于多余的符号,会使 diff 更加难以阅读。
不推荐:
border: 0;__
推荐:
border: 0;
如果使用 Sublime Text,你可在用户设置(User Settings)JSON 文件(可在文本编辑器的菜单中找到)中添加以下代码,每当你以此方法储存文件时,去除行尾空格操作便会自动完成:
"trim_trailing_white_space_on_save": true
整个文件中的缩进应保持前后一致,使用 Tab、2个空格或4个空格都可以,但需保持前后一致。
使用 UTF-8(无 BOM)。
确保你的编辑器将没有字节顺序标记的 UTF-8 用作字符编码。不要将样式表的编码设置为假定的 UTF-8。
在可行和必要时,对代码添加注释。
用注释解释代码的覆盖范围、目的和作用以及使用和选择各解决方案的原因。
用 TODO: 标注待办事项和任务项:
仅用关键词 TODO 标注待办事项,不要使用 @@ 等其他格式的字样。在任务项前加冒号,如:TODO: action item。
推荐:
/* TODO: 添加一个按钮元素 */
使用有效的 CSS。
使用有效的 CSS 是可测量的基准质量,可确保 CSS 的合理使用并有助于识别可删除的无效 CSS 代码。
使用有意义或具有普遍性的 ID 和类名称。
不可使用意义含糊的 ID 和类名称,使用能够反映相应元素意义的名称或具有普遍性的通用名。
最好使用能够反映相应元素意义的具体名称,因为这些名称最易于理解且不易变更。
具有普遍性的通用名被用于与类似元素意义相仿的元素,主要起辅助作用。
不推荐:
xxxxxxxxxx
.p-998 {
…
}
.btn-green {
…
}
推荐:
.gallery {
…
}
.btn-default {
…
}
避免用类型选择器限定 ID 和类名称。
除非情况需要(例如,在辅助类型中),否则不要将元素名和 ID 或类名称同时使用。为提高性能,避免使用不必要的祖先选择符。
在 CSS 文件中使用 ID 也是较糟糕的做法,类别始终比名称更具优势,如果你需要给予某元素一个特殊的名称,请使用类别。( ID 的唯一优点是在存在数千个类似元素的页面上能保持较快的运行速度。)
不推荐:
xxxxxxxxxx
ul#example {
…
}
div.error {
…
}
推荐:
xxxxxxxxxx
.example {
…
}
.error {
…
}
应使用简写。
CSS 可提供多种简写属性(例如,padding,而不是 padding-top、padding-bottom 等),应尽可能使用这些简写,但字体属性和在 Bootstrap 等框架中会覆盖其他同名属性的属性除外。
使用简写属性有助于提高代码的效率和易懂性。推荐在设置仅与字体 font 相关的属性时使用字体简写属性,但无需在进行小幅改动时使用。在使用字体简写属性时,请注意,如果未注明字体的大小和系列,浏览器会忽略整个字体声明。
不推荐:
x
border-top-style: none;
font-family: palatino, georgia, serif;
font-size: 100%;
line-height: 1.6;
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;
推荐:
xxxxxxxxxx
border-top: 0;
font: 100%/1.6 palatino, georgia, serif;
padding: 0 1em 2em;
去掉 0
值后面的单位。
不推荐:
xxxxxxxxxx
margin: 0em;
padding: 0px;
推荐:
xxxxxxxxxx
margin: 0;
padding: 0;
为方便阅读,十进制值中含有前导零。
不推荐:
font-size: .8em;
推荐:
font-size: 0.8em;
在可行时,使用三个十六进制表示法的字符。
不推荐:
color: #eebbcc;
推荐:
color: #ebc;
用连字符分隔 ID 和类名称中的字词(-)。
用连字符连接选择符中的词语和缩略词,以方便理解和扫描。
唯一的例外:在编写 BEM 样式 CSS 选择符时也可以使用下划线(_)。
不推荐:
xxxxxxxxxx
.demoimage {
…
}
.errorStatus {
…
}
推荐:
xxxxxxxxxx
.demo-image {
…
}
.error-status {
…
}
避免用户代理检测或 CSS Hack ——尝试另一种方法。
人们可能很想处理用户代理检测或特殊的 CSS 过滤器以及应变方案和非法入侵之间的样式差异。这两项措施均为实现和维护有效和可处理的代码库的最后方案。请考虑该样式是否对应用的性能至关重要,需要该样式的用户代理是否可以不采样该样式。
缩进所有代码块内容,即规则内的规则和声明,以反映层次结构、方便理解。
推荐:
@media screen, projection {
html {
background: #fff;
color: #444;
}
}
在所有声明后使用分号,以增加连贯性和延展性。
不推荐:
xxxxxxxxxx
.test {
display: block;
height: 100px
}
推荐:
xxxxxxxxxx
.test {
display: block;
height: 100px;
}
所有属性名冒号后均需添加空格,但属性和冒号间不加空格,以增加连贯性。
不推荐:
xxxxxxxxxx
font-weight:bold;
padding : 0;
margin :0;
推荐:
xxxxxxxxxx
font-weight: bold;
padding: 0;
margin: 0;
最后一个选择符和声明区起始处的左大括号之间需加空格。
不推荐:
xxxxxxxxxx
.video-block{
margin: 0;
}
.audio-block{
margin: 0;
}
推荐:
xxxxxxxxxx
.video-block {
margin: 0;
}
.audio-block {
margin: 0;
}
所有选择符和声明均需另起一行。
不推荐:
xxxxxxxxxx
h1, h2, h3 {
font-weight: normal;
line-height: 1.2;
}
推荐:
xxxxxxxxxx
h1,
h2,
h3 {
font-weight: normal;
line-height: 1.2;
}
所有规则间均需加一个空行(两个换行符)。
推荐:
xxxxxxxxxx
html {
background: #fff;
}
body {
margin: auto;
width: 50%;
}
属性选择符和属性值均需使用双引号,链接值( url())中不可使用双引号。
不推荐:
xxxxxxxxxx
@import url("css/links.css");
html {
font-family: 'Open Sans', arial, sans-serif;
}
推荐:
xxxxxxxxxx
@import url(css/links.css);
html {
font-family: "Open Sans", arial, sans-serif;
}
在可行时,用注释将样式表区块组合在一起,用新行分隔各区块。
推荐:
xxxxxxxxxx
/* Header */
.header {
…
}
.header-nav {
…
}
/* Content */
.gallery {
…
}
.gallery-img {
…
}
/* Footer */
.footer {
…
}
.footer-nav {
…
}
该指南是你在项目进行过程中所需遵守的官方指南。优达学城的评估人员会根据该指南为你的项目打分。在前端网页开发的世界中,有很"最佳"样式供你选择。因此,为了减少学生在项目过程中因选择何种样式所产生的困惑,我们强烈建议所有学生在其项目中遵循这个样式指南。
删除行尾空格。
行尾空格属于多余的符号,会使 diff 更加难以阅读。
不推荐:
var name = "John Smith";__
推荐:
var name = "John Smith";
如果使用 Sublime Text,你可在用户设置(User Settings)JSON 文件(可在文本编辑器的菜单中找到)中添加以下代码,每当你以此方法储存文件时,去除行尾空格操作便会自动完成:
"trim_trailing_white_space_on_save": true
整个文件中的缩进应保持前后一致,使用 Tab、2个空格或4个空格都可以,但需保持前后一致。
使用 UTF-8(无 BOM)。
确保你的编辑器将没有字节顺序标记的 UTF-8 用作字符编码。
用注释解释代码的覆盖范围、目的和作用以及使用和选择各解决方案的原因。
你可以选择使用 JSDoc,即编写代码注释的文件生成器和标准,对你的 JavaScript 功能进行记录,其优点包括为你的注释提供技术参照和能够针对文件生成网页的命令行 jsdoc 工具。 JSDoc 会为你提供记录代码的多种注释,但我们只推荐你使用以下种类:
该实例说明了如何记录类构造器(注意注释区开头使用的 /**,这个非常重要):
xxxxxxxxxx
/**
* @description 简要描述这本书
* @constructor
* @param {string} title - 书的标题
* @param {string} author - 书的作者
*/
function Book(title, author) {
}
以下函数含有能返回值的参数,注意,这里的参数作用一目了然,因此并未对其进行说明。
xxxxxxxxxx
/**
* @description 添加两个数字
* @param {number} a
* @param {number} b
* @returns {number} 数字 a 与 b 的和
*/
function sum(a, b) {
return a + b;
}
你也可以使用更多你想要编写的注释。
用 TODO: 标注待办事项和任务项:
仅用关键词 TODO 标注待办事项,不要使用 @@ 等其他格式的字样。在任务项前加冒号,如: TODO: 要做的事
推荐:
// TODO: 加些其他的需求
在 JavaScript 里一共有三种定义变量的方式:
当定义变量的时候,你应该使用上面列出的关键字来定义变量。优先考虑使用 const
定义你的变量,如果觉得以后需要对变量重新赋值的,则使用 let
。现在已经不推荐使用 var
关键字来定义变量了
始终使用分号。
依靠隐式插入会造成难以排除的细微问题。分号应放在函数表达式的末尾,而不是函数声明的末尾。
不推荐:
xxxxxxxxxx
var foo = function() {
return true // 缺少分号
} // 缺少分号
xxxxxxxxxx
function foo() {
return true;
}; // 额外的分号
推荐:
xxxxxxxxxx
var foo = function() {
return true;
};
xxxxxxxxxx
function foo() {
return true;
}
基本类型无需使用包装对象,此外,包装对象还具有潜在危险,但可以使用类型转换。
不推荐:
xxxxxxxxxx
var x = new Boolean(0);
if (x) {
alert('hi'); // 如果 x 是一个真实对象,则显示 hi
}
推荐:
xxxxxxxxxx
var x = Boolean(false);
if (x) {
alert('hi'); // 如果 x 是一个否定的布尔值,则显示 hi
}
进行该操作时要小心谨慎。 创建闭包的能力可能是 JavaScript 中最有用但最常被忽略的能力。需要记住的是,闭包会储存对其封闭范围的指示器,因此,将 DOM 元素与闭包相连会生成循环引用,从而导致内存的泄露。
不推荐:
xxxxxxxxxx
function foo(element, a, b) {
element.onclick = function() { /* 使用 a 和 b */ }
}
推荐:
xxxxxxxxxx
function foo(element, a, b) {
element.onclick = bar(a, b);
}
xxxxxxxxxx
function bar(a, b) {
return function() { /* 使用 a 和 b */ }
}
在迭代数组时,相比 for-in
循环, forEach
或 for
循环更具优势。
不推荐:
xxxxxxxxxx
myArray = ['a', 1, 'etc'];
for (var indexNum in myArray) {
console.log(myArray[indexNum]);
}
var starWars = {
"creatures": [
{
"name": "bantha",
"face": "furry"
},
{
"name": "loth-cat",
"face": "toothy"
}
]
};
for (var i in starWars.creatures) {
console.log(starWars.creatures[i].name);
console.log(starWars.creatures[i].face);
};
推荐:
xxxxxxxxxx
mySimpleArray = ['a', 1, 'etc'];
mySimpleArray.forEach(function(val) {
console.log(val);
});
var starWars = {
"creatures": [
{
"name": "bantha",
"face": "furry"
},
{
"name": "loth-cat",
"face": "toothy"
}
]
};
starWars.creatures.forEach(function(creature){
console.log(creature.name);
console.log(creature.face)
});
// 或者
myArray = ['a', 1, 'etc'];
for (var indexCount = 0; indexCount < myArray.length; indexCount++) {
console.log(myArray[indexCount]);
};
for-in
循环用于在对象中循环关键词。这样很容易出错,因为, for-in
不会从 0
循环,而是循环对象及其原型链中现存的所有关键词。
如果可以的话,对数据进行整理,以避免迭代对象。如果不可行,将 for-in
循环的内容包裹在条件语句中,以避免迭代原型链。
不推荐:
xxxxxxxxxx
myObj = {'firstName':'Ada','secondName':'Lovelace'};
for (var key in myObj) {
console.log(myObj[key]);
}
推荐:
xxxxxxxxxx
myObj = {'firstName':'Ada','lastName':'Lovelace'};
for (var key in myObj) {
if (myObj.hasOwnProperty(key)) {
console.log(myObj[key]);
}
}
不要使用。 编译期间无法妥善删除各行开头的空格,斜杠后的空白会引发棘手的问题,虽然大部分脚本引擎支持该操作,但这并不属于规格中的一部分。
不推荐:
xxxxxxxxxx
var myPoetry = '一二三四五,\
上山打老虎,\
老虎没打到,\
打到小松鼠,\
让我数一数,\
一二三四五';
推荐:
xxxxxxxxxx
var myPoetry = '黄河远上白云间,' +
'一片孤城万仞山。' +
'羌笛何须怨杨柳,' +
'春风不度玉门关。';
使用数组和对象字面量,而不是数组和对象构造函数。
不推荐:
xxxxxxxxxx
var myArray = new Array(x1, x2, x3);
var myObject = new Object();
myObject.a = 0;
推荐:
xxxxxxxxxx
var myArray = [x1, x2, x3];
var myObject = {
a: 0
};
总体来说,函数名称为 functionNames
,变量名称为 variableNames
,类名称为 ClassNames
,方法名称为 methodNames
,常量值名称为 CONSTANT_VALUES
,文件名称为 filenames
。
由于分号的隐式插入,大括号应与其内容放置在同一行。
推荐:
xxxxxxxxxx
if (something) {
// 执行某项任务
} else {
// 执行另外一项任务
}
只有在单行数组和对象初始器可以在写同一行时方可使用这两项。左括号前和右括号后都不应有空格。
推荐:
xxxxxxxxxx
var array = [1, 2, 3];
var object = {a: 1, b: 2, c: 3};
多行数组和对象初始器需进行单行缩进,与代码块一样,其括号与内容应位于同一行。
推荐:
xxxxxxxxxx
var array = [
'Joe <joe@email.com>',
'Sal <sal@email.com>',
'Murr <murr@email.com>',
'Q <q@email.com>'
];
var object = {
id: 'foo',
class: 'foo-important',
name: 'notification'
};
仅在需要时使用。 仅在语法和语义需要时少量、概括性地使用。
为了保持连贯性,应使用单引号 '
而不是双引号 "
。这在创建含有 HTML 的字符串时尤其有帮助。
推荐:
var element = '<button class="btn">Click Me</button>';
此规则较为明显的一个例外是在 JSON 对象中: JSON 要求使用双引号。
真假布尔表达式 以下为假的布尔表达式:
注意区分,以下为真的表达式:
不强制规定,但建议使用三元条件运算符编写简洁代码,避免使用以下代码:
不推荐:
xxxxxxxxxx
if (val) {
return foo();
} else {
return bar();
}
推荐:
return val ? foo() : bar();
&&
和 ||
这些二元布尔运算符为简化形式,会计算至最后一个已计算项。 ||
被称为默认的运算符,这是因为不应以下列方式编写代码:
不推荐:
xxxxxxxxxx
function foo(name) {
var theName;
if (name) {
theName = name;
} else {
theName = 'John';
}
}
推荐:
xxxxxxxxxx
function foo(name) {
var theName = name || 'John';
}
不推荐:
xxxxxxxxxx
if (node) {
if (node.kids) {
console.log(node.kids);
}
}
推荐:
xxxxxxxxxx
if (node && node.kids) {
console.log(node.kids);
}
该指南是你在项目进行过程中所需遵守的官方指南。优达学城的评估人员会根据该指南为你的项目打分。在前端网页开发的世界中,有很“最佳”样式供你选择。因此,为了减少学生在项目过程中因选择何种样式所产生的困惑,我们强烈建议所有学生在其项目中遵循这个样式指南。
提交信息由三个不同的部分构成,这些部分均由空行分隔:标题、可选的消息体和可选的注释。其布局大致如此:
xxxxxxxxxx
类型:主题
消息正文
注释
标题由消息类型和主题构成。
类型位于在标题内,有以下几种可能:
主题不得超过50个字符,首字母大写,末尾不加句号。 以祈使语气描述提交的任务,而不是其已完成的任务。例如,使用 change...,而不是 changed 或 changes 。
并不是所有的提交信息都复杂到需要主体,因此这是可选内容,仅在提交信息需要一定的解释和语境时使用。消息体是用于解释提交任务的内容和原因,而不是方法。
在编写正文时,需要在标题和正文间加一个空行,且每行的内容应控制在72个字符内。
注释是可选内容,用于引用问题跟踪的 ID 。
xxxxxxxxxx
Feature: 总结变动的内容,保持在50个字符内
如有需要,使用更详细的说明性文字,将其大概控制在72个字符。在部分语境中,第一行被视为提交信息的主题,余下的文本被视为主体。分隔总结与主体的空行十分重要(除非你完全忽略主体);否则`log`、`shortlog`和`rebase`等多个工具容易发生混淆。
解释该提交信息所解决的问题,说明你进行该变动的原因,而不是方法(代码本身可以解释方法)。
该变动是否存在副作用或其他直觉性后果?在这里进行解释。
后续段落前需加空行。
可以列出要点
- 通常情况下,要点会使用空格加上连字符或星号,中间用空行分隔,但该规定存在差别。
如果你使用问题追踪,将其引用放在末尾,例如:
解决了问题:#123
另见:#456, #789