Skip to content
Back to skills

Git Mastery

ASecurity

Advanced Git: rebase, bisect, reflog, cherry-pick, worktrees, LFS. Triggers: rebase, bisect, cherry-pick, reflog, force push, merge conflict, worktree.

  • 177 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
developmentgoshellbashgitperformancedocumentation

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned May 27, 2026

npx -y skills add softspark/ai-toolkit --skill git-mastery --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Git Mastery?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Git Mastery
[![Security: A β€” Skills Directory](https://www.skillsdirectory.com/api/skills/softspark-git-mastery/badge)](https://www.skillsdirectory.com/skills/softspark-git-mastery)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: git-mastery
description: "Advanced Git: rebase, bisect, reflog, cherry-pick, worktrees, LFS. Triggers: rebase, bisect, cherry-pick, reflog, force push, merge conflict, worktree."
effort: medium
user-invocable: false
allowed-tools: Read, Grep, Glob
---

# Git Mastery Skill

## πŸ›‘οΈ Safety First Protocol
- **Never** force push to `main` / `master` / `develop`.
- **Always** use `--force-with-lease` instead of `--force`.
- **Always** create a backup branch before complex operations:
  `git branch backup/feature-xyz-pre-rebase`

## Advanced Workflows

### 1. Automated Bug Hunting (Git Bisect)
Find the specific commit that introduced a bug.
```bash
# Start
git bisect start
git bisect bad              # Current version is broken
git bisect good <commit-sha> # Version that worked

# Automate with test script
git bisect run pytest tests/test_failing_feature.py
```

### 2. Interactive Interactive Rebase
Clean up commit history before merge.
```bash
git rebase -i HEAD~n
```
- **squash**: Combine commits.
- **reword**: Fix messages.
- **dropped**: Remove junk commits.

### 3. Log Analysis
Visualize branch topology.
```bash
git log --graph --oneline --decorate --all
```

### 4. Recovery (Reflog)
Recover "lost" commits after a bad reset/rebase.
```bash
git reflog
git reset --hard HEAD@{n}
```

### 5. Cherry Picking
Pick specific commits from other branches.
```bash
git cherry-pick <commit-sha>
# If valid conflict
git add .
git cherry-pick --continue
```

## Commit Message Standard (Conventional Commits)
- `feat:` New feature
- `fix:` Bug fix
- `docs:` Documentation only
- `style:` Formatting (white-space, etc)
- `refactor:` Code change that neither fixes a bug nor adds a feature
- `perf:` Performance improvement
- `test:` Adding missing tests
- `chore:` Build process/auxiliary tools

## Common Rationalizations

| Excuse | Why It's Wrong |
|--------|----------------|
| "I'll clean up commits later" | Later means never β€” write clean commits as you go |
| "Force push is fine on my branch" | Others may have fetched your branch β€” use --force-with-lease |
| "One big commit is simpler" | Big commits are impossible to review, bisect, or revert β€” keep them atomic |
| "Merge conflicts mean someone else's problem" | Conflicts mean you diverged too long β€” rebase frequently to stay aligned |
| "Commit messages don't matter" | Messages are documentation β€” future you needs to understand why, not just what |

## Rules

- **MUST** use `--force-with-lease` instead of `--force` for any force operation on a shared branch
- **MUST** create a backup branch before interactive rebase, reset --hard, or filter-repo: `git branch backup/<name>-pre-rebase`
- **NEVER** force-push to `main`, `master`, or `develop` β€” these are shared trunk branches by convention
- **NEVER** rewrite history that has already been pushed AND consumed by others β€” you will orphan their clones
- **CRITICAL**: the reflog is a 90-day safety net (`gc.reflogExpire`) β€” tag anything you want to keep longer. Do not rely on reflog for multi-month recovery.
- **MANDATORY**: commit messages follow Conventional Commits (`feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`) β€” drift defeats automated changelog and release tooling

## Gotchas

- `git bisect` relies on each commit being testable. Flaky tests corrupt the bisection silently β€” a flaky "bad" mark sends `bisect` down the wrong half. Run the test 3Γ— at the boundary commits if flakiness is known.
- `git cherry-pick <sha>` of a merge commit fails without `--mainline 1` (or 2). The error is cryptic ("commit is a merge but no -m option was given"); the fix is simple but non-obvious.
- `git reflog` entries expire by default in 90 days (`gc.reflogExpire`) and unreferenced commits get garbage-collected after 30 days (`gc.reflogExpireUnreachable`). Long-term recovery of "lost" commits from reflog is not guaranteed.
- `git rebase -i --root` is supposed to include the very first commit, but on **shallow clones** (`--depth N`) the "root" is the shallow boundary, not the actual initial commit. Run `git fetch --unshallow` before rebasing --root.
- `git filter-branch` is **deprecated** and slow (shell-based, re-forks per commit). Use `git filter-repo` for history rewriting β€” it is a separate tool (`pip install git-filter-repo`) but 100Γ— faster and endorsed by the Git maintainers.
- `git pull --rebase` on a branch with unpushed merge commits rewrites those merges into linear history, silently losing the merge metadata. If a merge was intentional (e.g., to preserve feature-branch context), use `git pull --no-rebase` or set `pull.ff=only` globally.

## When NOT to Load

- For simple commits on a ready branch β€” use `/commit`
- For opening a PR after commits are clean β€” use `/pr`
- For a specific failed operation needing root-cause analysis β€” use `/debug` on the git output
- For CI-specific git behavior (shallow clones, LFS on runners) β€” use `/ci-cd-patterns`
- For the in-repo `.git/hooks/*` content β€” this skill is user-facing Git; hook mechanics live in `/hook-creator` and `install_git_hooks.py`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.