---
id: daily-setup-pre-commit
name: "setup-pre-commit"
url: https://skills.yangsir.net/skill/daily-setup-pre-commit
author: mattpocock
domain: ai-code-generation-quality
tags: ["pre-commit-hooks", "code-quality", "git-workflow", "devops-automation", "code-review"]
install_count: 102400
rating: 4.80 (20 reviews)
github: https://github.com/mattpocock/skills
---

# setup-pre-commit

> 配置并启用Git的pre-commit钩子，结合Husky和lint-staged工具，在代码提交前自动执行代码检查和格式化，确保代码质量。

**Stats**: 102,400 installs · 4.8/5 (20 reviews)

## Before / After 对比

### 中文

## Readme

# setup-pre-commit

# Setup Pre-Commit Hooks

## What This Sets Up

- **Husky** pre-commit hook

- **lint-staged** running Prettier on all staged files

- **Prettier** config (if missing)

- **typecheck** and **test** scripts in the pre-commit hook

## Steps

### 1. Detect package manager

Check for `package-lock.json` (npm), `pnpm-lock.yaml` (pnpm), `yarn.lock` (yarn), `bun.lockb` (bun). Use whichever is present. Default to npm if unclear.

### 2. Install dependencies

Install as devDependencies:

```
husky lint-staged prettier

```

### 3. Initialize Husky

```
npx husky init

```

This creates `.husky/` dir and adds `prepare: "husky"` to package.json.

### 4. Create `.husky/pre-commit`

Write this file (no shebang needed for Husky v9+):

```
npx lint-staged
npm run typecheck
npm run test

```

**Adapt**: Replace `npm` with detected package manager. If repo has no `typecheck` or `test` script in package.json, omit those lines and tell the user.

### 5. Create `.lintstagedrc`

```
{
  "*": "prettier --ignore-unknown --write"
}

```

### 6. Create `.prettierrc` (if missing)

Only create if no Prettier config exists. Use these defaults:

```
{
  "useTabs": false,
  "tabWidth": 2,
  "printWidth": 80,
  "singleQuote": false,
  "trailingComma": "es5",
  "semi": true,
  "arrowParens": "always"
}

```

### 7. Verify

-  `.husky/pre-commit` exists and is executable

-  `.lintstagedrc` exists

-  `prepare` script in package.json is `"husky"`

-  `prettier` config exists

-  Run `npx lint-staged` to verify it works

### 8. Commit

Stage all changed/created files and commit with message: `Add pre-commit hooks (husky + lint-staged + prettier)`

This will run through the new pre-commit hooks — a good smoke test that everything works.

## Notes

- Husky v9+ doesn't need shebangs in hook files

- `prettier --ignore-unknown` skips files Prettier can't parse (images, etc.)

- The pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests

Weekly Installs207Repository[mattpocock/skills](https://github.com/mattpocock/skills)GitHub Stars2.4KFirst SeenFeb 13, 2026Security Audits[Gen Agent Trust HubPass](/mattpocock/skills/setup-pre-commit/security/agent-trust-hub)[SocketPass](/mattpocock/skills/setup-pre-commit/security/socket)[SnykPass](/mattpocock/skills/setup-pre-commit/security/snyk)Installed onopencode200gemini-cli199codex197github-copilot194kimi-cli193cursor192

---
*Source: https://skills.yangsir.net/skill/daily-setup-pre-commit*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-setup-pre-commit/markdown*