feat(mq): add gt mq integration land command (gt-h5n.5)

Implements the 'gt mq integration land <epic>' command that merges an
integration branch to main.

Features:
- Verifies all MRs targeting integration branch are merged (unless --force)
- Merges with --no-ff for clear merge commit
- Runs tests before push (unless --skip-tests)
- Deletes integration branch (local and remote)
- Closes epic with merge commit info
- Rollback on test/push failure
- Dry-run mode (--dry-run)

Also adds to git package:
- MergeNoFF: merge with --no-ff flag
- DeleteRemoteBranch: delete branch on origin
- Reset: reset HEAD with optional --hard

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-19 14:49:09 -08:00
parent 9a55153450
commit 8738fd74a1
2 changed files with 321 additions and 1 deletions

View File

@@ -201,6 +201,30 @@ func (g *Git) Merge(branch string) error {
return err
}
// MergeNoFF merges the given branch with --no-ff (no fast-forward).
// This always creates a merge commit even if fast-forward is possible.
func (g *Git) MergeNoFF(branch, message string) error {
_, err := g.run("merge", "--no-ff", "-m", message, branch)
return err
}
// DeleteRemoteBranch deletes a branch from the remote.
func (g *Git) DeleteRemoteBranch(remote, branch string) error {
_, err := g.run("push", remote, "--delete", branch)
return err
}
// Reset resets the current branch to the given ref.
// If hard is true, uses --hard (discards working tree changes).
func (g *Git) Reset(ref string, hard bool) error {
args := []string{"reset", ref}
if hard {
args = []string{"reset", "--hard", ref}
}
_, err := g.run(args...)
return err
}
// Rebase rebases the current branch onto the given ref.
func (g *Git) Rebase(onto string) error {
_, err := g.run("rebase", onto)