Written by: Ali-Reza Adl-Tabatabai, Founder and CEO, Gitar
Key Takeaways
- Graphite-stacked PRs simplify monorepo dependency management by creating dependent branches that maintain clean diffs for focused code reviews.
- Configure Graphite for Turborepo or Nx with workspace paths and affected CI commands so builds run only on changed projects.
- Use gt restack –all and gt sync to resolve conflicts automatically and keep stacks synchronized with upstream changes.
- Improve CI pipelines with path filters in GitHub Actions or GitLab CI and reduce failures and costs by up to 60%.
- Supercharge Graphite workflows with Gitar’s AI code review and CI analysis. Try Gitar free for 14 days to automate stacked PR reviews and CI diagnostics.
Install and Configure Graphite for Your Monorepo (2026)
Install the Graphite CLI with Homebrew on macOS or Linux:
brew install graphite
On Windows or for alternative methods, download the binary from Graphite’s releases page. After installation, authenticate with your Git provider:
gt auth –token YOUR_GITHUB_TOKEN # or for GitLab gt auth –gitlab –token YOUR_GITLAB_TOKEN
Initialize Graphite in your monorepo by setting up the workspace at the repository root:
cd your-monorepo gt repo init
For Turborepo monorepos, create a .graphite/config file that defines workspace paths and affected builds:
{ “workspace”: { “paths”: [“apps/*”, “packages/*”, “libs/*”] }, “ci”: { “affected”: “turbo run build –filter=…{HEAD^}” } }
For Nx monorepos, configure the affected command with Nx syntax:
{ “workspace”: { “paths”: [“apps/*”, “libs/*”] }, “ci”: { “affected”: “nx affected:build –base=HEAD^” } }
This configuration lets Graphite understand your monorepo layout and run CI only for affected projects. For more configuration details, see the Gitar documentation.
Create and Manage Graphite Stacked PRs Step by Step
Stacked PRs in monorepos work best when you follow a clear sequence that keeps dependencies explicit. Use these steps as a repeatable workflow.
1. Create the base branch for your feature:
gt stack create shared-lib-update # Make changes to shared library git add packages/shared-lib/ gt commit -m “Update shared authentication library”
2. Create dependent branches that build on the base:
gt stack create frontend-auth-integration –from shared-lib-update # Update frontend to use new auth library git add apps/frontend/ gt commit -m “Integrate new auth library in frontend” gt stack create backend-auth-integration –from shared-lib-update # Update backend services git add apps/backend/ gt commit -m “Update backend auth service integration”
3. Submit the entire stack for review:
gt submit stack
This command creates pull requests for all branches in the stack and wires up dependencies. Each PR shows only the diff for that specific change instead of the full stack.
4. Monitor and sync dependencies:
gt status # Shows current stack state and any conflicts gt sync # Pulls latest changes and updates the stack
Expected output shows clean dependency chains where each PR builds on its predecessor. The frontend and backend integration PRs depend on the shared library update so reviewers can see how changes relate.
Keep Monorepo Stacks in Sync with Restack Commands
Maintaining synchronized stacks in monorepos requires regular restacking as your main branch evolves. Use the comprehensive restack command:
gt restack –all
This command updates all branches in your stack with changes from the main branch and resolves conflicts automatically when possible. For Turborepo monorepos, pair restacking with affected builds:
gt restack –all && turbo run build –filter=…{HEAD^}
For Nx monorepos, follow the affected command pattern:
gt restack –all && nx affected:build –base=HEAD^
Troubleshooting Nx Restack Failures with Logs and Fixes
Restack failures in Nx monorepos often trace back to dependency graph conflicts. Typical errors look like:
Error: Cannot restack – conflicting changes in nx.json Conflict in libs/shared-utils/project.json
Resolve these issues by editing the conflicted files, then forcing the restack:
gt restack –force –branch your-branch-name
For persistent problems, reset the stack and recreate it:
gt stack reset gt stack create new-base-branch
The troubleshooting guide in the documentation provides detailed CI failure analysis steps.

Optimize Monorepo CI with Graphite Stacks
Configuring CI for affected builds keeps Graphite stacked PRs fast and cost effective. For GitHub Actions with Turborepo, use the dorny/paths-filter@v3 action as a standard pattern:
name: CI on: [push, pull_request] jobs: filter-paths: runs-on: ubuntu-latest outputs: frontend: ${{ steps.filter.outputs.frontend }} backend: ${{ steps.filter.outputs.backend }} steps: – uses: dorny/paths-filter@v3 id: filter with: filters: | frontend: – ‘apps/frontend/**’ – ‘packages/shared/**’ backend: – ‘apps/backend/**’ – ‘packages/shared/**’ build-frontend: needs: filter-paths if: needs.filter-paths.outputs.frontend == ‘true’ runs-on: ubuntu-latest steps: – run: turbo run build –filter=frontend…
This setup runs jobs only when relevant paths change and reduces CI/CD time and costs significantly. For GitLab CI, configure parent-child pipelines with conditional execution:
trigger_frontend: trigger: include: .gitlab/ci/frontend.yml rules: – changes: – apps/frontend/**/* – packages/shared/**/*
Recent benchmarks show Shopify reduced CI failures by 60% and reclaimed 27,061 engineering hours annually using Graphite’s merge queue with virtual zones in their monorepo.
Merge, Clean Up, and Apply Monorepo Best Practices
Complete your stacked PR workflow by landing changes in dependency order:
gt stack land
This command merges all PRs in the stack sequentially so dependencies remain satisfied. Configure your merge strategy to match team preferences:
# For rebase-based workflows gt config merge.strategy rebase # For merge commit workflows gt config merge.strategy merge
Clean up merged branches automatically:
gt cleanup
Resolve Turborepo Merge Conflicts with the CLI
Merge conflicts in Turborepo configuration files respond well to a structured approach. Conflicts in turbo.json often appear as:
<<<<<<< HEAD “pipeline”: { “build”: { “dependsOn”: [“^build”] } ======= “pipeline”: { “build”: { “dependsOn”: [“^build”, “^lint”] } >>>>>>> feature-branch
Combine both dependency requirements, stage the resolved file, and continue the merge:
git add turbo.json gt continue
Effective monorepo stacked PRs keep individual PRs small, group changes by logical zones such as frontend, backend, and shared libraries, and use descriptive branch names that show dependencies.
Supercharge Graphite Stacks with Gitar AI Code Review
Graphite manages stacked PR workflows, and Gitar adds AI code review plus CI failure analysis on top. Gitar’s CI agent keeps full context from PR creation to merge and analyzes failures continuously so builds stay green more often by surfacing root causes quickly.
For code review, Gitar provides comprehensive AI feedback in a single dashboard comment that consolidates findings. This single comment replaces scattered notifications across your diff and keeps reviewers focused.

The following table shows how Gitar compares to manual workflows and competing tools across key review and CI capabilities:
|
Capability |
Manual/Competitors |
Gitar |
|
PR summaries & inline suggestions |
Partial |
Yes (Trial/Team) |
|
CI failure analysis |
No |
Yes |
|
Auto-apply fixes |
No |
Yes (Trial/Team) |
|
Single dashboard comment |
No |
Yes |
Teams using Gitar report more efficient review workflows. See how Gitar’s consolidated review comments and CI analysis work in your monorepo with a 14-day Team Plan trial.

Gitar vs Manual Graphite-Only Workflows
Traditional Graphite workflows require manual effort when CI fails or reviewers request changes across multiple PRs in a stack. Gitar automates analysis of these pain points by providing CI failure analysis across stacks that removes manual log digging, comprehensive AI code review during the trial that reduces reviewer load, and workflow analytics that quantify time savings.
Gitar also integrates with major CI platforms such as GitHub Actions, GitLab CI, CircleCI, and Buildkite so it fits into existing pipelines. The documentation covers CI analysis features and platform support in depth.

FAQ
How to manage dependencies in a monorepo with Graphite?
Dependency management in monorepos with Graphite starts with logical stacks where shared library updates live on a base branch and consumer applications use dependent branches. Run gt stack create base-branch for foundational changes, then gt stack create dependent-branch –from base for each consuming application. The gt submit stack command creates linked PRs that reviewers can assess independently while still seeing the dependency chain. Gitar enhances this workflow with AI code review, CI failure analysis, and automated workflows during the trial period.
What are Graphite PR stacks?
Graphite PR stacks are ordered sequences of dependent pull requests where each PR builds on the previous one. This structure lets developers break large features into smaller, reviewable chunks. Unlike a single large PR that accumulates all changes, stacks support parallel development and review of related work. Each PR shows only its specific diff, which keeps reviews focused and manageable and reduces merge conflicts in complex monorepo environments.
Graphite vs polyrepo for dependency management?
Graphite stacked PRs shine in monorepos because they manage cross-package dependencies atomically inside one repository. Polyrepo setups require coordinating changes across multiple repositories, which often introduces version drift and integration problems. Monorepos with Graphite support atomic updates where shared library changes and consumers are developed, reviewed, and merged together. This approach removes much of the complexity of semantic versioning and keeps dependent code synchronized with library updates.
Does Gitar work with Turborepo and Nx stacks?
Gitar supports Turborepo and Nx monorepos and provides full codebase context for AI code review and CI failure analysis. It works across GitHub, GitLab, and CI systems such as GitHub Actions, GitLab CI, CircleCI, and Buildkite. When CI failures occur, Gitar analyzes them with full repository context during the Team Plan trial.
How does Gitar handle merge conflicts in stacked PRs?
Gitar helps surface issues that cause merge conflicts early by combining CI failure analysis with AI code review. The platform evaluates failures in the context of your entire repository and presents actionable insights in a single dashboard comment. This guidance reduces the manual effort required to keep complex stacked PR workflows healthy.
Mastering Graphite stacked PR dependencies in monorepos depends on consistent CLI workflows, tuned CI configurations, and smart automation. Manual approaches struggle with the complexity of modern monorepo workflows at scale. Combining Graphite’s stacking capabilities with Gitar’s AI code review delivers the efficient dependency management that high-velocity teams need.