docs: handle squash merge readback

This commit is contained in:
Max Shepherd-Cross 2026-06-15 13:03:27 +10:00
parent c7ae63201a
commit 0424668fe9
2 changed files with 24 additions and 0 deletions

View File

@ -1479,6 +1479,18 @@ Capture merge SHA:
gh pr view --json mergeCommit -q .mergeCommit.oid
```
Squash/rebase merge readback guard:
- Do **not** prove success by requiring the PR head SHA to be an ancestor of the base branch. GitHub squash and rebase merges deliberately create a new commit, so `git merge-base --is-ancestor <head_sha> origin/<base>` can fail even when the PR is merged.
- Once GitHub reports `state == "MERGED"` with a non-null `mergeCommit.oid`, treat that as authoritative. Record the merge SHA and continue.
- If local cleanup or readback is needed, fetch the base branch and compare/sync against the merge commit, not the old PR branch commit:
```bash
BASE=$(gh pr view --json baseRefName -q .baseRefName)
MERGE_SHA=$(gh pr view --json mergeCommit -q .mergeCommit.oid)
git fetch origin "$BASE"
git diff --quiet "$MERGE_SHA" origin/"$BASE" || git log --oneline --decorate -1 "$MERGE_SHA" origin/"$BASE"
```
- If the worktree is clean and only needs to stop looking diverged after a squash merge, prefer non-destructive cleanup such as `git switch --detach "$MERGE_SHA"` for throwaway task worktrees. Do not force-push or reset a user's branch unless they explicitly ask.
Worktree cleanup — non-destructive, candidate-based:
```bash
git worktree list --porcelain

View File

@ -631,6 +631,18 @@ Capture merge SHA:
gh pr view --json mergeCommit -q .mergeCommit.oid
```
Squash/rebase merge readback guard:
- Do **not** prove success by requiring the PR head SHA to be an ancestor of the base branch. GitHub squash and rebase merges deliberately create a new commit, so `git merge-base --is-ancestor <head_sha> origin/<base>` can fail even when the PR is merged.
- Once GitHub reports `state == "MERGED"` with a non-null `mergeCommit.oid`, treat that as authoritative. Record the merge SHA and continue.
- If local cleanup or readback is needed, fetch the base branch and compare/sync against the merge commit, not the old PR branch commit:
```bash
BASE=$(gh pr view --json baseRefName -q .baseRefName)
MERGE_SHA=$(gh pr view --json mergeCommit -q .mergeCommit.oid)
git fetch origin "$BASE"
git diff --quiet "$MERGE_SHA" origin/"$BASE" || git log --oneline --decorate -1 "$MERGE_SHA" origin/"$BASE"
```
- If the worktree is clean and only needs to stop looking diverged after a squash merge, prefer non-destructive cleanup such as `git switch --detach "$MERGE_SHA"` for throwaway task worktrees. Do not force-push or reset a user's branch unless they explicitly ask.
Worktree cleanup — non-destructive, candidate-based:
```bash
git worktree list --porcelain