These are my personal rules for Git branch names and commit messages.

## Branch Names

### Solo Development

```sh
+-- main
|   +-- feature/{feature-name}
|   +-- hotfix/{bug-id}
```

- Basically only main and feature are used.

### Team Development (Small Scale)

```sh
+-- main
|   +-- develop
|   |   +-- feature/{base-version}-{feature-name}
|   |   +-- release/{version}
+-- hotfix/{version}-{bug-id}
```

※ When managing branches per app in a monorepo

```sh
develop-{system-name}
feature-{system-name}/{base-version}-{feature-name}
etc.
```

## Commit Messages

| Prefix | Description |
|------------|------|
| feat: | A new feature |
| fix: | A bug fix |
| docs: | Documentation-only changes |
| style: | Changes that don't affect code behavior — whitespace, formatting, missing semicolons, etc. |
| refactor: | A code change that neither fixes a bug nor adds a feature |
| perf: | A code change that improves performance |
| test: | Adding missing tests or correcting existing tests |
| chore: | Changes to the build process or auxiliary tools and libraries such as documentation generation |

※ In a monorepo, append the system name after the prefix.

```sh
feat({system-name})
e.g. feat(web)
```

Write a **prefixed title** on the first line,
leave the second line blank,
and describe the **purpose and content of the change** concretely on the third line.

```txt
feat: add user login

Added user login and user authentication.
```
