Labsco
brave logo

force-push-downstream

โœ“ Officialโ˜… 3,392

by brave ยท part of brave/brave-core

Force-push a branch and all its downstream branches to origin. Auto-detects

๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeQuick setup
๐Ÿ”’ Repo-maintenance skill. It exists to help maintain brave/brave-core itself โ€” it's only useful if you contribute code to that project.

This is the playbook your agent receives when the skill activates โ€” you don't need to read it to use the skill, but it's here to audit before installing.

Force Push Downstream

Force-push a branch and all its downstream branches to their respective remotes. Skips branches whose local and remote tips already match.

Arguments

  • starting-branch (optional) โ€” The branch to start from. Defaults to the current branch if not specified.

Examples:

  • /force-push-downstream โ€” push current branch + all downstream
  • /force-push-downstream candle-service-webui โ€” push from that branch down

Current State

  • Branch: !git branch --show-current
  • Status: !git status --short

Steps

1. Determine starting branch

If an argument was provided, use it as the starting branch. Otherwise use the current branch.

git branch --show-current

2. Detect downstream chain

Run the detect-chain script (shared with rebase-downstream) to find all downstream branches:

bash .claude/skills/rebase-downstream/detect-chain.sh <starting-branch>

3. Build push list

The push list is: the starting branch itself, followed by every downstream branch in tree order (from detect-chain output).

4. Show plan and confirm

Display the branches that will be pushed:

Force push plan:
  candle-service-background-webcontents
    โ†’ background-webcontents-timer
      โ†’ candle-service-webui
        โ†’ candle-service-model-loading
          โ†’ brave-history-embeddings
          โ†’ local-ai-internals

For each branch, check if it is already up-to-date with origin:

# Get local and remote SHAs
local_sha=$(git rev-parse <branch>)
remote_sha=$(git rev-parse origin/<branch> 2>/dev/null || echo "none")

If local_sha == remote_sha, mark as (up-to-date, will skip). If the remote branch doesn't exist, mark as (new, will push). Otherwise mark as (diverged, will force-push).

Ask the user to confirm before pushing.

5. Push each branch

For each branch in the push list:

  1. Skip if up-to-date: If local SHA matches origin SHA, print skip message and move on.

  2. Force push:

    git push --force-with-lease origin <branch>

    Use --force-with-lease for safety โ€” it fails if someone else pushed to the remote since our last fetch, preventing accidental overwrites of others' work.

  3. If the remote branch doesn't exist (first push), use:

    git push -u origin <branch>
  4. Report result: Print success/failure for each branch.

6. Report summary

After all pushes complete, show a summary:

Force push results:
  โœ“ candle-service-background-webcontents (pushed)
  - background-webcontents-timer (skipped, up-to-date)
  โœ“ candle-service-webui (pushed)
  โœ“ candle-service-model-loading (pushed)
  โœ“ brave-history-embeddings (pushed, new)
  โœ— local-ai-internals (failed: ...)

Important

  • Always use --force-with-lease instead of --force for safety
  • Do NOT push without user confirmation
  • Skip branches that are already up-to-date (local == remote SHA)
  • If any push fails, report it but continue with remaining branches
  • Return to the original branch at the end