The wait is over: Tower 10 has arrived! For enthusiasts of Stacked Pull Requests, this release is a game-changer. We're excited to announce comprehensive support for Graphite, integrating its most powerful features directly into Tower. You can now handle your stacked branches and craft Pull Requests seamlessly within our Git client ✌️
With our Tower 8.0 update, we set the stage for incorporating advanced Git workflows. Features like Branch Dependency and the "Restack" action were introduced, and the response from our user community has been overwhelmingly positive.
Building on that foundation, Tower 10 now offers full support for Graphite's toolset, empowering you to merge changes into your projects faster than ever.
This article will guide you through the essentials of Graphite and how it integrates with Tower 10.
☝️ Tower 10 is currently in Beta. To try it out, simply change the Release Channel to "Beta" under Preferences > Updates in the Tower for Windows application.
About Graphite
If you want to enhance your team's Pull Request process and are unfamiliar with Graphite, you're in for a treat!
Graphite employs a stack-based methodology that allows developers to work on several features in parallel by layering changes. This is often called the Stacked Pull Requests workflow.
The idea is straightforward: by linking smaller, incremental Pull Requests, you reduce the amount of code to be reviewed. This leads to quicker integration and minimizes the chances of significant merge conflicts or bugs.
Effective branch management is key to this approach, and this is where Graphite excels. Even if you are the sole user of this workflow in your team, it works flawlessly from the get-go. There's every reason to give it a shot! 😉
Graphite not only simplifies branch management but also provides a dedicated interface for code reviews (be sure to check out AI Reviews!) and complements GitHub by extending its functionality.
In addition to its Web UI, Graphite provides:
You can discover more about Graphite in this article. We believed that integrating these capabilities into a Git client would be a great advantage, so we went ahead and did just that.
Let's start the tour!
Setting Up Graphite in Tower 10
To begin, simply click the "Workflows" button in the toolbar and select the new Graphite.dev entry. You will need a Graphite.dev account and the Graphite CLI tool (version 1.5.3 or higher) installed.
☝️ You may find the "Configure Workflow" button greyed out if you haven't configured Graphite yet. Make sure you install the CLI tool and configure the Graphite token by accessing Tower's terminal ("File -> Open in Terminal").
You'll be asked to specify the "Trunk" branch (typically main) and your Graphite token, which should be detected automatically by Tower. We recommend installing the Graphite binary via npm , the standard package manager for Node.js.
You'll notice the "Workflows" icon has changed to Graphite. Clicking it gives you quick access to popular Graphite commands and opens the Graphite dashboard in your browser.

Working with Graphite in Tower 10
Now is a great time to explore the Graphite commands you can run effortlessly in Tower!
Working Copy
With the Graphite workflow active, you'll see new options in the "Working Copy" view.
We've introduced a "Create" action that lets you instantly make a new branch with your staged changes (equivalent to gt create in the Graphite CLI). This is a best practice in the Graphite workflow, which recommends treating each branch as a small, atomic changeset with a single commit initially.
The "Commit" action is similar to the gt modify --commit command in Graphite: it adds a new commit to the current branch and automatically restacks if there are no conflicts.

☝️ Tower's "Quick Amend" feature is also compatible with the Graphite workflow. To amend the current branch's commit, hold down (Left Alt + CTRL), and the "Commit" button will change to "Modify". This is the same as running gt modify in the Graphite CLI.
Creating a Stacked Branch
Graphite is centered around Stacked Branches, and creating a new one is simple: right-click on any branch to create a new stacked branch based on it.

In the following dialog, you can choose its parent branch for straightforward integration and opt to check it out right away.

From the context menu, you can also perform all other standard Graphite operations, like renaming, merging, squashing, or deleting branches.

Setting the Parent Branch
You can change a branch's parent at any time, just as you would with Stacked Branches, by using the context menu and selecting "Track Parent Branch."
In Graphite's terminology, this is known as "tracking" (gt track) and "untracking" (gt untrack) a stacked branch.

Restacking
Restacking syncs all changes by rebasing each child branch onto its parent. Tower shows an icon in the sidebar for branches that need restacking. You can perform this action by right-clicking the branch and choosing "Restack [Branch]".
In the branch's history, a yellow banner will also inform you that the branch needs to be restacked.

In the "Restack Branch" dialog, you'll see a "Restack Full Stack" option. If this is not checked, Tower/Graphite will restack the selected branch and its parents. If checked, the branch's children will also be restacked (hence "full stack").
Tower will let you know if any conflicts occur during the restack.

Syncing a Branch
Right-clicking any branch also lets you "sync" it. This synchronizes all branches in the stack, much like the gt get command.

Tower also offers extra options, like restacking all branches in your repository.
Submitting a Branch (To Create a Pull Request)
You can submit a branch to create a PR by right-clicking it and selecting the option from the context menu.
More options are available by clicking the drop-down arrow, such as updating only branches with existing open PRs.

All open Pull Requests are accessible in Tower's "Pull Requests" view, in the sidebar or via the shortcut CTRL + 4.

This view lets you inspect, merge, close, comment on, or check out pull requests without opening a browser.
Merge Queue
Graphite includes a Merge Queue feature that avoids semantic merge conflicts by automating the rebase process during merges. This keeps the trunk branch "green" and helps development teams move faster with fewer interruptions.
In Tower, if a merge is possible, the Graphite branch is added to the merge queue. The merge is asynchronous, so you'll need to manually refresh and sync the branch to see if it has been merged.
When a Graphite branch is sent to the merge queue, it's validated remotely. If it can be merged, it is; otherwise, the process fails.
To do this, right-click the branch and choose "Add [BRANCH] to Merge Queue…" from Tower's context menu.

Warning Messages
While using Tower, you might accidentally disrupt Graphite's state with certain Git operations, like a git push.
Tower will warn you when this might happen before you proceed.

You can enable or disable these prompts in the "Integration" tab of Tower's Settings.

Other Improvements
As always, we've also made some other improvements under the hood.
Here's a list of the improvements and bug fixes we've addressed:
- System Menu: The Alt + SPACE shortcut now works as expected.
- Submodules: Navigation through nested submodules has been refined.
- Portable Git has been updated to version 2.51.2 for improved compatibility and performance.
We hope you enjoy this release! Happy stacking! 😊
Not a Tower user yet? Download our 30-day free trial and see a better way to work with Git!
PS: Did you know? Tower Pro is now free for students and teachers and educational institutions!