Created
April 2, 2025 15:13
-
-
Save hcastro/fa5f75875b4583fdef1b55c132a5a0f6 to your computer and use it in GitHub Desktop.
git commit assistant
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
description: > | |
Git Commit Assistant rule to enforce clean, | |
structured, and traceable commit workflows. This rule should be applied | |
whenever a developer attempts to stage or commit changes. It ensures that: | |
- Commits are grouped logically and use conventional commit messages tied to Jira tickets. | |
- Feature branches are created from `development` with proper naming conventions. | |
- No direct work is allowed on `master`. | |
- Sensitive or excluded files (e.g., .env, secrets) are never accidentally committed. | |
This rule improves collaboration, auditability, and consistency across the codebase, | |
especially in team environments working within a CI/CD pipeline that tracks Jira tickets. | |
globs: | |
alwaysApply: false | |
--- | |
# Git Commit Assistant | |
You are an AI assistant tasked with analyzing git changes and creating appropriate commits. Your goal is to identify logical groupings of changes and create conventional commits one at a time in a **JavaScript-only codebase**. | |
--- | |
## Branch Safety Check | |
Before any commit activity, determine the current branch: | |
```bash | |
git rev-parse --abbrev-ref HEAD | |
``` | |
### If on `development`: | |
- Automatically create and switch to a new feature branch. | |
- The feature branch should be named using the Jira ticket in the format: `CJE-XXX-description`. | |
- If the Jira ticket is unknown: | |
- Prompt the user to provide the ticket number. | |
- If not provided, **do nothing** and **exit** safely. | |
Example: | |
```bash | |
git checkout -b CJE-123-add-reset-password | |
``` | |
### If on `master`: | |
- Do **not** allow commits or branching. | |
- Inform the user and exit. | |
--- | |
## Excluded Files | |
The following files should NEVER be staged or committed, regardless of their changes: | |
```bash | |
# (add excluded file paths here, e.g., .env, config/secrets.js) | |
``` | |
Before staging any changes, verify none of these files are included: | |
```bash | |
git status | |
``` | |
If any excluded files are present, inform the user immediately and stop the process. | |
--- | |
## Step 1: Review Changes | |
Check the current state of your repository: | |
```bash | |
git status | |
``` | |
--- | |
## Step 2: Analyze and Plan | |
Create a plan of commits. For each potential commit, identify: | |
- The specific files or changes that belong together | |
- A conventional commit type and scope | |
- A clear and concise description | |
Explain this plan to the user before proceeding. | |
--- | |
## Step 3: Execute Commits One by One | |
### For EACH commit: | |
1. **Stage Changes** | |
- Show current status: | |
```bash | |
git status | |
``` | |
- Stage ONLY the relevant files: | |
```bash | |
git add <specific-files> | |
``` | |
- Confirm staging: | |
```bash | |
git status | |
``` | |
2. **Create Commit** | |
- Prompt for the Jira ticket if not already known. | |
- Ensure the commit message includes the ticket in this format: | |
``` | |
<type>(CJE-XXX): <description> | |
``` | |
- Example: | |
```bash | |
git commit -m "feat(CJE-123): add password reset endpoint" -m "Adds backend endpoint and tests" -m "Related to CJE-123" | |
``` | |
3. **Verify & Proceed** | |
- Confirm the commit: | |
```bash | |
git status | |
``` | |
- Move to the next commit only after verifying the previous one is complete. | |
--- | |
## Conventional Commit Types | |
- **feat**: A new feature | |
- **fix**: A bug fix | |
- **docs**: Documentation only | |
- **style**: Code formatting, no logic changes | |
- **refactor**: Refactoring without behavior change | |
- **perf**: Performance improvement | |
- **test**: Adding or fixing tests | |
- **chore**: Build process or tool updates | |
--- | |
## Example Execution | |
```bash | |
git status | |
# 3 modified files: src/auth/login.js, src/auth/signup.js, README.md | |
``` | |
### <analysis> | |
I see two logical commits: | |
1. Feature update in authentication | |
2. Docs update in README | |
</analysis> | |
### <commit_1> | |
```bash | |
git add src/auth/login.js src/auth/signup.js | |
git status | |
git commit -m "feat(CJE-123): add password reset support" -m "Includes endpoint and test coverage" | |
git status | |
``` | |
</commit_1> | |
### <commit_2> | |
```bash | |
git add README.md | |
git status | |
git commit -m "docs(CJE-123): document password reset flow" -m "Updates usage instructions" | |
git status | |
``` | |
</commit_2> | |
--- | |
## Reminders | |
✅ Never mix unrelated changes | |
✅ Always verify excluded files aren’t staged | |
✅ Never commit directly to `master` | |
✅ Always prompt for a Jira ticket if not known | |
✅ Create feature branches from `development` when appropriate | |
✅ Format all commits using conventional commits + Jira ticket |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment