Git 相关操作

使用 Git 上传本地项目到 github?

  • 第一步:初始化 git
git init
  • 第二步:查看文件状态
git status
  • 第三步:添加所有文件
git add .
  • 第四步:提交文件到本地仓库
git commit -am 'first commit init product'
  • 第五步:添加远程仓库地址
git remote add origin git仓库地址
  • 第六步:将本地项目推送到远程仓库
git push -u origin master

git 相关命令

  • 分支
查看本地分支:git branch
查看远程分支:git branch -r
新增分支:git checkout -b 分支名
删除分支:git branch -D 分支名
推送本地分支到远程:git push origin HEAD -u
  • 命令
git merge origin master    拉取远程仓库最新代码
git add .    追踪文件的变化
git commit -am "备注信息"    将代码提交到本地仓库
git push   本地仓库代码推送到远程仓库
提交pull request   管理员审核
git diff   查看每个文件的变化
git difftool   查看每个文件的变化以另外一种方式

git tag tag-initial  创建一个标记用于以后查看
git tag -d tag名   删除tag
git push origin tag-initial  将创建的标记提交到远程

git push -u -f origin master 强制推送

git commit 规范

市面上比较流行的方案是约定式提交规范(Conventional Commits),它受到了Angular提交准则的启发,并在很大程度上以其为依据。约定式提交规范是一种基于提交消息的轻量级约定。 它提供了一组用于创建清晰的提交历史的简单规则;这使得编写基于规范的自动化工具变得更容易。它的 message 格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

<类型>[可选的作用域]: <描述>

[可选的正文]

[可选的脚注]

其中,Header 是必需的,Body 和 Footer 可以省略。

介绍

commitizen 是一个撰写合格commit message的工具, 用于代替git commit 指令; cz-conventional-changelog 适配器提供 conventional-changelog标准(约定式提交标准)

  • 全局安装
npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

安装完毕后,可直接使用git cz来取代git commit

  • 项目内安装

commitlint 负责用于对commit message进行格式校验, husky 负责提供更易用的git hook

yarn add husky @commitlint/config-conventional @commitlint/cli -D

注意:commitlint 只能做格式规范, 无法触及内容. 对于内容质量的把控只能靠我们自己.

配置

项目根目录创建 commitlint.config.js

echo 'module.exports = {extends: ["@commitlint/config-conventional"]};' > ./commitlint.config.js

注意:使用 UTF-8 格式, 不然 husky 会报错

package.json 文件中引入 husky

"husky": {
    "hooks": {
      "commit-msg": "commitlint -e $GIT_PARAMS"
    }
}

使用

执行 git add . 之后, 执行 git cz 进入 interactive 模式,根据提示依次填写

? Select the type of change that you're committing:  ? 选择要提交的更改类型:

? What is the scope of this change (e.g. component or file name): (press enter to skip)  ? 此更改的范围是什么(例如组件或文件名):(按enter键跳过)

? Write a short, imperative tense description of the change (max 55 chars):  ? 写一个简短的命令式时态描述(最多55个字符):

? Provide a longer description of the change: (press enter to skip)  ? 提供更改的详细说明:(按enter键跳过)

? Are there any breaking changes?  ? 有什么突破性的变化吗?

? Describe the breaking changes:  ? 描述突破性的变化:

? Does this change affect any open issues?  ? 这一变化是否影响到任何未决问题?

? Add issue references (e.g. "fix #123", "re #123".):  ? 添加问题参考(例如“fix#123”、“re#123”):

最后执行 git push -u origin branchName

选项说明

  1. type (必填)

type为必填项,用于指定commit的类型,约定了feat、fix两个主要type,以及docs、style、build、refactor、revert五个特殊type,其余type暂不使用。

# 主要type
feat:     增加新功能
fix:      修复bug

# 特殊type
docs:     只改动了文档相关的内容
style:    不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build:    构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert:   执行git revert打印的message

# 暂不使用type
test:     添加测试或者修改现有测试
perf:     提高性能的改动
ci:       与CI(持续集成服务)有关的改动
chore:    不修改src或者test的其余修改,例如构建过程或辅助工具的变动
  1. scope (选填)

scope也为必填项,用于描述改动的范围,格式为项目名/模块名,例如:package.json ...

  1. subject(必填)

subject是 commit 目的的简短描述,不超过 55 个字符

生成 Change log

$ npm install -g conventional-changelog
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -w
{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -w -r 0"
  }
}

conventional-changelog-cli:从git metadata生成变更日志

  • 安装
yarn add conventional-changelog-cli -S
  • 在项目根目录下新建CHANGELOG.md

package.json 添加指令

"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s"

注意:如果这是您第一次使用此工具,并且想要生成所有以前的变更日志,则可以执行:

conventional-changelog -p angular -i CHANGELOG.md -s -r 0