友情链接 关于我们

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:,描述应该用来描述破坏性变更
  • 可以使用 featfix 之外的类型,如 docs: updated ref docs.
  • 工具的实现必须不区分大小写地解析构成约定式提交的信息单元,只有 BREAKING CHANGE 必须是大写的
  • BREAKING-CHANGE 作为脚注令牌时必须BREAKING CHANGE 的同义词