github / github/gh-stack

Detect and prevent empty-diff PRs from being auto-marked as merged during stack submit

Aperta
#488 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Go
Stelle
1.5k
Fork
70
Merge medio
1g 8h
PR unite (30g)
7

Descrizione

## Summary

When using `gh stack`, it's possible to end up with a PR whose head branch has no commits beyond its base branch (i.e., an empty diff). When this happens, GitHub automatically marks that PR as "merged" as soon as it is synchronized (e.g., via `gh stack submit` pushing to origin), even though no actual merge was intended.

## Repro scenario

Given a stack `main <- branch A <- branch B`:

1. Commit to `A` (intending it for `B`).
2. Check out `B` from `A` without making a new commit.
3. Push `B` and open PRs for `A` and `B`.
4. Run `gh stack init` to adopt the two branches into a stack.
5. Run `gh stack submit`.

Because `B`'s branch contains no commits beyond `A`, GitHub treats the PR for `B` as having "no diff" against its base, and the subsequent push/synchronize causes GitHub to automatically mark PR `B` as merged into `A` — even though the user never intended or triggered a merge.

## Observed example

- https://github.com/github/mdash-connector/pull/14
- https://github.com/github/mdash-connector/pull/15

After running `gh stack init` followed by `gh stack submit`, PR #15 (branch B) was unexpectedly shown as merged into PR #14 (branch A), because branch B had no unique commits relative to branch A.

## Request

`gh stack` should proactively detect this situation (a branch in the stack with no commits ahead of its base) and warn or prevent the user from creating/submitting a PR in that state, rather than letting it silently get auto-merged by GitHub.

## Context

Reported by @jschnapper, triaged by @skarim, in a Slack thread.

_Created from a [Slack conversation](https://github.slack.com/archives/C09M2GA1KQX/p1787881967913419?thread_ts=1787881967.913419&cid=C09M2GA1KQX)._

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Riproduci l’empty-diff stack dell’issue, quindi segui i flussi gh stack init e gh stack submit che creano o inviano PRs. Determina dove un branch non ha commit oltre la propria base e definisci se il comando debba avvisare o interrompersi. Il lavoro è completato quando il caso di diff vuoto non viene più contrassegnato silenziosamente e automaticamente come merged e lo scenario di stack segnalato è coperto dai test.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
go
Ambito
cli
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.