Tower 12 for Mac — Introducing Stacked Branches
Table of Contents
Tower 12, currently in Beta, showcases the first features of our ambitious "Tower Workflows" project. This release sets the stage for upcoming updates by incorporating "Branch Dependency" capabilities and the new "Restack" action.
Did we say "Restack"? That's right: if you're a fan of Stacked Branches, fasten your seat belt and get ready for an exciting ride!
With Tower Workflows, we aim to provide you with the ability to create and customize your own branching workflows. You can use popular branching workflows as a starting point, tweak them, come up with your own unique solution from scratch, or embrace other popular workflows like the Stacked Pull Requests workflow.
For this to be possible, the Tower team focused on two big features for this release:
- Branch Dependencies.
- The "Restack Branch" action.
Let's become more familiar with these two concepts. For a demonstration of the new features in action, you can also watch the video below!
Branch Dependencies
This feature establishes the foundation for Git workflows that depend on deeply nested branches, such as the Stacked Pull Requests workflow.
Tower can now keep track of the original branch from which another branch was created — something that Git does not handle on its own.
By tracking the parent-child relationships between branches, Tower can determine the base branch of a feature branch accurately.
This opens up many possibilities, such as:
- When merging a branch, Tower already knows its base branch and will suggest it by default (coming in an upcoming release).
- When comparing a branch, Tower can automatically select its parent branch to show which commits were introduced on this particular branch.
- Tower can detect when a feature branch is behind its base branch and prompt the user to merge those changes into the feature branch to keep it up-to-date. This reduces the probability and complexity of merge conflicts when merging back changes later on.
You do not need to take any action to start using this feature, as newly created branches in Tower will automatically have their parent branch set to the branch from which they were created.
If necessary, you can manually set or unset a parent branch using the context menu of a branch. This can be useful if the branch already existed or if you decide to change the parent branch later on.
The New "Restack Branch" Action
With the implementation of Branch Dependencies, Tower can now easily track all parent branches of a branch and provide the option to "restack" the branch and all its parent branches up to the "trunk" branch.
💡 The "trunk" branch serves as the main development branch for the repository and does not have a parent; in most projects, it's named "main".
Restacking synchronizes all changes by rebasing each child branch onto its parent branch. This is particularly useful for workflows that involve stacked branches, such as the "Stacked Pull Requests" workflow.
Manually updating branches can be a cumbersome task, especially if it needs to be done multiple times per day, as described in more detail here.
With Tower, it's just a single action!
Restacking in Tower
To activate the "Stacked Branches" workflow, first you need to click on the corresponding option in the "Workflow" icon located in the toolbar.
Tower will prompt you to determine the "Trunk" branch.
In the dialog above, you can also group all child branches under the parent branch for clearer visualization in the sidebar.
This setting can also be defined in Tower's Preferences (look for "Stack branches under parent branch" in the "General" tab).
Here is a comparison with the option turned off and on:
Whenever the parent branch has an update, you will notice a new "restack" icon appearing next to each child branch in the sidebar. Tower will also display a yellow banner in the branch's history view to indicate that you should restack that branch.
You can also restack the branch with Quick Actions, Tower's version of the Command Palette (⌘ + ⇧ + A).
A New Welcome Screen
If you launch Tower and no project is open, you will now be greeted with a new welcome window, so that you can start working on your projects right away.
This window allows you to:
- Initialize a new Git repository.
- Clone a repository from a URL.
- Open an existing repository from a folder.
- Quickly open one of the most recently accessed repositories by clicking on the folders on the right.
💡 Don't forget that you can also use Quick Open (⌘ + ⇧ + O) to quickly navigate to a different project.
Other Improvements and Fixes
We've also taken a moment to make some improvements under the hood.
Here is what has been fixed:
- Tower 11 introduced new Light and Dark mode icons. Now, the selected app icon will persist in the Dock, even when Tower is not running.
- In the Commit Details view, if the author and committer of a commit are the same, their avatar will not be displayed twice, even if their timestamps differ.
Additionally, the bundled Git version has been updated to 2.45.1.
We hope you enjoy this release! If you already have a Tower account, switch to the Beta channel to try it out! Simply head over to the "Updates" tab in Tower's Preferences to make the switch.
Happy stacking! 😊
Not a Tower user yet? Download our 30-day free trial and experience a better way to work with Git!
PS: Did you know? Tower Pro is now free for students as well as teachers and educational institutions!