Feature request: support merge-based stack synchronization without force-pushing
- Vorherrschende Sprache
- Go
- Sterne
- 1.5k
- Forks
- 70
- Ø Merge
- 1 T. 8 Std.
- Gemergte PRs (30 T.)
- 7
Beschreibung
## Summary
Please add an option for stacked pull requests to synchronize branches using merge commits instead of rebasing and force-pushing branch history.
## Motivation
Our organization does not allow force-pushes because they rewrite branch history and can make audit trails, approvals, and incident investigation more difficult. The current "Rebase stack" workflow is therefore incompatible with our repository policies.
## Proposed behavior
Add a merge-based synchronization mode for stacks:
- When a parent branch changes, merge the parent into each child branch in stack order.
- Preserve existing commits and branch history.
- Do not force-push rewritten branch history.
- Keep the existing rebase behavior as the default or as a selectable repository/stack setting.
- Make the selected synchronization mode visible in the stack UI and CLI.
- Respect branch protection and merge-commit policies.
## Example
Given:
```text
main
└── feature-a
└── feature-b
```
When main advances, merge main into feature-a, then merge the updated feature-a into feature-b, instead of rebasing both branches and force-pushing them.
## Acceptance criteria
- A stack can be configured to use merge-based synchronization.
- Synchronizing the stack does not require force-pushing any branch.
- Existing approvals and checks are handled consistently with the merge-based history.
- Conflicts are reported per branch and can be resolved through the normal workflow.
- The behavior works with protected branches that block force-pushes.
- Existing rebase-based stacks continue to work unchanged.
## Related issues
- #268: Stacked PR cannot be merged into a merge-queue branch
- #442: gh stack sync pushed a stack branch's merge commit directly onto the trunk branch
Beitragsleitfaden
Rechercherichtung
Beginne damit, den bestehenden Workflow "Rebase stack" und den Stack-Synchronisierungsbefehl in der CLI nachzuverfolgen. Ermittle, wie Branch-Aktualisierungen, Force-Pushes, Konflikte, Genehmigungen, Checks und geschützte Branches behandelt werden. Als abgeschlossen gilt, dass ein auswählbarer, auf Merge basierender Modus Branches in Stack-Reihenfolge synchronisiert, ohne Force-Pushes auszuführen, während bestehende, auf Rebase basierende Stacks weiterhin funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- git, github, go
- Bereich
- cli, devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100