git 及 hook

384 阅读2分钟

一、常规操作

  • 本地项目提交远程
git init
git remote add origin https://github.com/chengliu0508/demo.git
  • 初始拉取代码
git clone origin https://github.com/chengliu0508/demo.git
  • 提交
git checkout -b mybranch

git add .
git commit -m "first commit"
git pull origin master:mybranch
git push origin mybranch
  • 发起合并请求

    git merge 新建新的commit,之前两条分支指向它

    git rebase 找到共同祖先,线形记录

    git cherry-pick 挑选分支的某一次或几次提交记录合并

  • 回退

    git revert xx 放弃某次提交xx,有记录

    git reset xx —hard 回滚到某次提交xx,无记录 git reset HEAD . 撤销add的代码

二、git配置

git config --list
git config --global user.email 'xxx@xx.com'
git config --global user.name 'xxx'

git pull = git fetch + git merge

image.png

三、git hook

Git 能在特定的重要动作发生时触发自定义脚本,其中比较常用的有:pre-commitcommit-msgpre-push 等钩子(hooks),.git/hooks 目录生成一系列的 hooks 脚本

  • pre-commit 触发时进行代码格式验证
  • commit-msg 触发时对 commit 消息和提交用户进行验证
  • pre-push 触发时进行单元测试、e2e 测试等操作

npm install 执行完成后,自动执行 git config core.hooksPath hooks 命令。 git config core.hooksPath hooks 命令将 git hooks 目录设置为项目根目录下的 hooks 目录。

"scripts": {
    "lint": "eslint --ext .js src/",
    "postinstall": "git config core.hooksPath hooks"
},

四、 husky

husky 是一个为 git 客户端增加 hook 的工具。npx husky init 在项目根目录下创建 .husky 目录,husky 包含很多 hook,常用的有:pre-commit、commit-msg、pre-push。

在 package.json 中添加一个脚本,"prepare": "husky install"

五、lint-staged

提交代码的时候,我们希望只对要提交的部分代码进行 eslint 检查,而不影响其他的代码,就需要借助 lint-staged 这个工具。

lint-staged 这个工具一般结合 husky 来使用,它可以让 husky 的 hook 触发的命令只作用于 git add 那些文件(即 git 暂存区的文件)。

①、安装 lint-staged

npm install lint-staged -D

②、修改 package.json 文件

在 package.json 中添加 lint-staged 配置项,这里我们要结合 Prettier 代码格式化,所以配置如下:

// package.json
{
    ...
    "lint-staged": {
        "*.{vue,js,ts,jsx,tsx}": [
            "yarn prettier",
            "yarn lint"
        ]
    }
}

上述命令表示:只对 git 暂存区的 .vue、.js、.ts、.jsx、.tsx 文件执行 prettier 代码格式化和 eslint 检查。

③、修改 .husky/pre-commit 文件

修改 .husky/pre-commit hook 文件中触发命令为 npx lint-staged。

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
 
npx lint-staged

以上,husky 和 lint-staged 组合配置完成。

然后,尝试修改一下 vue 文件,git add 之后 git commit -m "xx",这时候只会对待提交的文件进行代码格式化和 eslint 检测,如果 eslint 检测通过则成功提交,否则终止提交

推荐

欢迎关注我的前端自检清单,我和你一起成长