DO NOT auto-invoke this skill. This destructively overwrites a remote branch. Always ask for user confirmation before proceeding.
sync-force-to
Overwrite a remote target branch with the current branch by deleting the remote target and re-pushing. Avoids git push --force by using delete + push instead.
Before overwriting, the script automatically:
- Pushes the old target state as a
backup/YYYYMMDDHHMM-<target>branch - Creates a PR for the backup branch against the default branch
- Closes the PR and deletes the backup branch
- The closed PR retains GitHub's "Restore branch" button for recovery
If the target branch doesn't exist yet (first-time push), backup steps are skipped.
Usage
Normal mode
Run the bundled script:
bash $HOME/.claude/skills/sync-force-to/scripts/sync-force-to.sh $ARGUMENTS
Report the script output to the user verbatim. Do not add extra commentary unless there was an error.
Setup mode (--setup)
When $ARGUMENTS is --setup, do NOT run the script. Instead, configure the current project's GitHub Actions workflows to skip CI on backup/* branches:
- Find all workflow files:
.github/workflows/*.ymland.github/workflows/*.yaml - For each workflow file, check
on:triggers (push,pull_request, etc.) - For each trigger that could run on
backup/**branches:
- If the trigger has a
branches:filter that already excludesbackup/**, skip it - If the trigger has a
branches:filter, add'!backup/**'to the list to exclude it - If the trigger has NO branch filter (runs on all branches), add
branches-ignore: ['backup/**'] - If the trigger already has
branches-ignore:, add'backup/**'to the existing list
- Report what files were changed
Important notes for setup:
- Do not modify triggers for
workflow_dispatch,schedule, or other non-branch triggers - Only modify
pushandpull_request/pull_request_targettriggers - Preserve existing YAML formatting and comments as much as possible
- Show the user the diff of changes before committing