Rebase & Merge
When you ask the bot to rebase or merge a PR, it brings the PR branch up to date with the base branch and resolves any conflicts it encounters. The two strategies are exposed as separate commands so you’re always deliberate about the resulting commit history.
Triggering a rebase or merge
Section titled “Triggering a rebase or merge”On any PR, post a comment:
@vgvbot rebase this PR onto main@vgvbot merge main into this PROr use slash commands:
@vgvbot /rebase@vgvbot /mergeWhat the bot does
Section titled “What the bot does”Merge — The bot calls GitHub’s merge endpoint, which creates a verified merge commit. If there’s a conflict, it falls back to a local merge, runs the conflict-resolution loop (see below), and commits the result through the GitHub API to ensure the commit remains verified.
Rebase — The bot rebases the branch locally, resolving any conflicts along the way, then replays every rebased commit through the GitHub API one by one. This preserves original authorship and keeps every commit GitHub-verified.
Every commit the bot produces carries GitHub’s “Verified” badge.
Conflict resolution
Section titled “Conflict resolution”When conflicts arise, the bot:
-
Checks whether the conflicts look tractable. It gives up immediately (without running the coding agent) if:
- Any conflicted file is a binary, generated file, or lockfile (
package-lock.json,pubspec.lock,yarn.lock, etc.) - More than 20 files are conflicted, or any single file has more than 50 conflict hunks
- The conflict is a delete-vs-modify case (one side deleted the file, the other modified it)
- Any conflicted file is a binary, generated file, or lockfile (
-
Asks the coding agent to resolve what remains. The agent is instructed to edit only the conflicted files, remove all conflict markers, and — crucially — give up rather than guess. If the intent of either side is unclear, if the two sides implement contradictory features, or if resolving would require deleting non-trivial work, the agent backs out cleanly.
-
Loops up to 5 conflict rounds. If the cap is hit, the bot gives up.
When the bot gives up
Section titled “When the bot gives up”Giving up is a deliberate, reasoned outcome — not a bug. When it happens:
- The local git operation is aborted cleanly.
- The PR branch on GitHub is left untouched. This is the core safety guarantee — a give-up always leaves the remote in exactly the state it was before the bot started.
- The bot posts a comment explaining why it gave up and what you can do instead.
Example:
I tried to rebase this PR onto
mainbut couldn’t safely resolve the conflicts. Reason: the two sides implement contradictory changes to the same function. The branch is unchanged — please resolve the conflicts manually.
PRs from forks
Section titled “PRs from forks”The bot cannot rebase or merge PRs from forks — it doesn’t have write access to the fork’s head branch. It will tell you this up front and not attempt the operation.
Already up to date
Section titled “Already up to date”If the PR is already up to date with the base branch, the bot posts a friendly message and exits without touching anything.