Git workflow
Runs the daily branch to PR to merge loop safely on any git/GitHub repo — one branch per task, confirm the branch before every commit, rebase onto latest main before review, keep PRs small with a what/why/how-to-test description, and recover cleanly with amend, revert, and reflog. Use when starting a task branch, preparing or reviewing a pull request, deciding whether to amend or revert, undoing a bad commit, or recovering work that seems lost. Not for writing the commit text itself (see commit-message) or reviewing the diff's contents (see code-review).From its SKILL.md
npx -y skills add Deadlymind/nanolama --skill git-workflowAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.9 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Git workflow (branch to PR to merge)
When to use
Any time you move a change from your working tree into the shared history — cutting
a task branch, opening or updating a PR, or digging yourself out after a bad commit.
The shared branch (main) is sacred: it stays green and only receives reviewed,
rebased work.
Pattern
Two guards hold the whole loop together:
- Confirm your branch before every commit. A shared checkout or a worktree can switch under you between commands, so never assume — check, then commit.
- Rebase onto latest
mainbefore requesting review, so CI tests the code as it will actually land, not a stale merge base.
Everything else — small PRs, honest descriptions, no reviews on red CI — falls out of protecting the shared branch.
Steps / idioms
-
Branch per task, never commit straight to
main. Name by intent (feat/…,fix/…):git switch -c feat/tenant-filter main # branch off a fresh main # ...work, then before EACH commit, confirm where you are: git branch --show-current # must NOT be main / a shared branch git add -p && git commit # message: see commit-message git fetch origin git rebase origin/main # replay onto latest before review git push -u origin HEAD # (push --force-with-lease after a rebase) -
Keep PRs small. One reviewable idea per PR; if it grows, split it and stack the branches (each PR targets the one below it) rather than shipping a 40-file wall.
-
Write a description that answers what / why / how-to-test. Add before/after screenshots for any visual change so a reviewer verifies without checking out.
-
Don't request review on red CI. If you want early direction, open a Draft PR and say what feedback you're after; move it to Ready only once CI is green.
Resolving conflicts
A three-way merge conflict means git couldn't reconcile two edits; resolve by intent, not by mechanically picking a side.
- Lockfiles are generated, not merged. When
uv.lockorpnpm-lock.yamlconflicts, don't hand-edit the hashes — take the merged manifest (pyproject.toml/package.json), then regenerate:git checkout --theirs uv.lock && uv lock, orgit checkout --theirs pnpm-lock.yaml && pnpm install --lockfile-only. A manually stitched lockfile installs a set nobody resolved. - Two migrations on one app — each branch added a migration to the same Django app,
so both share a parent and the app has a branched history. Don't renumber by hand:
rebase onto latest
main, thenpython manage.py makemigrations --mergeto write a tie migration that depends on both leaves. Rebasing first keeps the merge node last. - Deleted-but-modified — one side deleted a file the other side changed, and git
can't guess your intent. Decide deliberately:
git rm <file>to honor the deletion, orgit add <file>to keep the modified version. Never letgit checkout --ours/--theirssilently drop the decision.
After any resolution, re-run the build and tests before continuing the rebase — a clean
git status only means the text merged, not that it works.
Adapt to your repo
Rename the shared branch if it isn't main (master, develop, a release branch).
Match your host's push protection and the branch-name convention your team uses
(prefixes, ticket ids). If PRs auto-run CI, confirm the required checks before marking
Ready; if you use stacked PRs, pick a tool or a plain base-branch chain and stay
consistent.
Gotchas
- Amend only before you push. Rewriting a commit others may have pulled forces them into a painful reset — once it's shared, add a new commit instead.
- Undo merged history with
git revert, never a force-push to a shared branch. Revert makes a new inverse commit that preserves history; force-pushingmainrewrites everyone's base. - A "lost" commit usually isn't.
git refloglists every HEAD you've been on; find the sha andgit switch -c rescue <sha>(orgit cherry-pickit) to recover. --force-with-leaseover--forceon your own branch — it refuses to clobber commits you haven't seen (e.g. a teammate's push to your PR).- Rebasing a branch others share rewrites their base too; only rebase branches that are yours.
See also
commit-messagecode-reviewci-cdmigrations
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.