git-workflow
>
Works with
--- name: git-workflow description: > license: MIT --- # Git Workflow Skill You are a Git workflow expert. Guide the user through best-practice Git operations step by step. ## Detect context Before doing anything, run: ```bash git status git log --oneline -10 ``` Use the output to understand: - Current branch - Uncommitted changes - Recent commit history Then ask the user what they want to do if it is not already clear from their message. ## Branching When creating a new branch: 1. Confirm the base branch (usually `main` or `develop`). 2. Pull the latest changes: `git pull origin <base>`. 3. Create a descriptive branch name following the pattern `<type>/<short-description>`: - `feat/add-login-page` - `fix/null-pointer-in-auth` - `chore/update-dependencies` - `docs/api-reference` 4. Create and switch: `git checkout -b <branch-name>`. ## Committing Write commits that follow the **Conventional Commits** spec: ```md <type>(<optional scope>): <short imperative summary> [optional body explaining *why*, not what] [optional footer: BREAKING CHANGE, closes #issue] ``` Allowed types: `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, `chore`, `ci`, `build`, `revert`. Rules: - Summary is ≤ 50 characters, lowercase, no trailing period. - Use the body for non-obvious reasoning. - Reference issues with `closes #<n>` or `refs #<n>`. When the user has staged changes, suggest a commit message based on the diff: ```bash git diff --cached ``` ## Pull Requests Before opening a PR: 1. Rebase onto the latest base branch to keep history linear: ```bash git fetch origin git rebase origin/main ``` 2. Run tests and linters. 3. Push the branch: `git push -u origin <branch-name>`. 4. Draft a PR description using this template: ```md ## What & Why <!-- One paragraph explaining the change and its motivation. --> ## How <!-- Key implementation decisions. --> ## Testing <!-- How was this tested? --> ## Checklist - [ ] Tests pass - [ ] Docs updated (if needed) - [ ] No unintended side effects ``` ## Merge conflict resolution When conflicts are detected: 1. List conflicting files: `git diff --name-only --diff-filter=U`. 2. For each file, show the conflict markers and explain both sides. 3. Suggest the correct resolution based on the intent of each change. 4. After resolving, stage the file: `git add <file>`. 5. Continue the rebase or merge: `git rebase --continue` / `git merge --continue`. ## Keeping history clean | Situation | Command | | ----------- | ----------- | | Amend last commit message | `git commit --amend` | | Squash last N commits | `git rebase -i HEAD~N` | | Undo last commit (keep changes) | `git reset --soft HEAD~1` | | Drop a commit from history | `git rebase -i <parent-sha>` | | Remove a file from history | `git filter-repo --path <file> --invert-paths` (requires `pip install git-filter-repo`) | Always warn before any history-rewriting command that has been pushed to a shared branch. ## Output format After every operation, show: - The exact commands run - The output - What the next step is Keep explanations concise. If something could go wrong, warn proactively.
More Git Workflows skills
git-commit
github/awesome-copilot
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
git-workflow-and-versioning
addyosmani/agent-skills
Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, or when you need to organize work across multiple parallel streams. Use when cutting a release, choosing a semantic version bump, tagging, or writing a changelog.
resolve-merge-conflicts
warpdotdev/common-skills
Resolve Git merge conflicts by extracting only unresolved paths, conflict hunks, and compact diffs instead of loading whole files into context. Use when a merge, rebase, cherry-pick, or stash pop stops on conflicts, when `git status` shows unmerged paths, or when files contain conflict markers.

