Git 备忘录
快速跳转
常用命令
下面大部分命令收集自 it-tools.tech,并结合个人开发经验补充了部分命令。
代码块中的蓝色字体均可以编辑,以便快捷修改复制
配置
设置全局用户名与邮箱:
bash
git config --global user.name "WaLudo"
git config --global user.email "[email protected]" 开始一个新项目
初始化一个新的 Git 仓库:
bash
git init 克隆现有的 Git 仓库:
bash
git clone https://github.com/WaLudo/waludo-tools.git 提交
提交所有已跟踪的变更:
bash
git commit -am "feat: 新增两杯咖啡" 提交所有变更:
bash
git add .
git commit -m "feat: 新增五杯咖啡" 将新的修改追加到上一次提交:
bash
git commit --amend --no-edit 我搞砸了
修改最近一次提交的信息:
bash
git commit --amend 撤销最近一次提交,但保留更改:
bash
git reset HEAD~1 撤销最近 N 次提交,但保留更改:
bash
git reset HEAD~N 撤销最近一次提交,并且丢弃所有更改:
bash
git reset HEAD~1 --hard 将本地分支重置到远程状态:
bash
git fetch origin bash
git reset --hard origin/branch-name 杂项
重命名本地 master 分支为 main:
bash
git branch -m master main 提交规范
参考 约定式提交 v1.0.0 规范。
验证你的提交是否符合规范
git commit -m "feat(scope): description" Type 类型速查
| 类型 | 说明 |
|---|---|
fix | 修复了一个 bug |
feat | 新增了一个功能 |
build | 修改项目构建系统(依赖库、外部接口、Node 版本等) |
chore | 非业务性代码修改(构建流程、工具配置等) |
ci | 修改持续集成流程(CI/CD 配置) |
docs | 修改文档(README、API 文档等) |
style | 修改代码样式(缩进、空格、空行等,不影响逻辑) |
refactor | 重构代码(修改结构、命名,不改变功能) |
perf | 性能优化 |
test | 修改测试用例 |
Scope 范围
可以为提交类型添加圆括号包围的范围,提供额外的上下文信息:
feat(parser): adds ability to parse arrays
破坏性变更
! 代表引入了破坏性变更,可以是任意类型提交的一部分:
feat(api)!: send an email to the customer when a product is shipped
或者在脚注中包含 BREAKING CHANGE 可以达到同样效果。
多行正文与脚注
包含多行正文和多行脚注的提交说明:
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
Reviewed-by: Z
Refs: #123
完整规范
本文中的关键词 “必须”、“禁止(MUST NOT)”、“必要(REQUIRED)”、“应当(SHALL)”、“不应当(SHALL NOT)”、“应该(SHOULD)”、“不应该(SHOULD NOT)”、“推荐(RECOMMENDED)”、“可以(MAY)” 和 “可选(OPTIONAL)“,其相关解释参考 RFC 2119。
- 每个提交必须使用类型字段前缀,其后接可选的范围字段、可选的
!,以及必要的冒号(英文半角)和空格 - 实现新功能时,必须使用
feat类型 - 修复 bug 时,必须使用
fix类型 - 范围字段可以跟随在类型字段后面,必须是描述某部分代码的名词,用圆括号包围,如
fix(parser): - 描述字段必须直接跟在
<类型>(范围)前缀的冒号和空格之后 - 在简短描述之后,可以编写较长的提交正文,正文必须起始于描述字段结束的一个空行后
- 在正文结束的一个空行之后,可以编写一行或多行脚注,每行脚注必须包含一个令牌(token),后跟
:<space>或<space>#作为分隔符 - 脚注的令牌必须使用
-作为连字符(如Acked-by),例外:BREAKING CHANGE可被视为一个令牌 - 破坏性变更必须在提交信息中标记出来——或在
<类型>(范围)前缀中用!,或作为脚注BREAKING CHANGE: <描述> - 如果使用了
!,脚注中可以不写BREAKING CHANGE:,描述应该用来描述破坏性变更 - 可以使用
feat和fix之外的类型,如docs: updated ref docs. - 工具的实现必须不区分大小写地解析构成约定式提交的信息单元,只有
BREAKING CHANGE必须是大写的 BREAKING-CHANGE作为脚注令牌时必须是BREAKING CHANGE的同义词