6

I use SourceTree as a Git GUI tool. I'm very productive with the app and find it far preferable to the command line Git interface for common tasks.

Unfortunately, SourceTree is incredibly slow, buggy, lacking features, and rarely updated. I would very much like to reduce my dependency on Atlassian's product.

The problem is that I'm heavily dependent on SourceTree's Split View Staging view of the staging area. This view perfectly fits my mental model of how a staging view should work.

Split View Staging view selection

This view allows individual lines, hunks, or single-character changes to be staged independently. Then, all of the currently staged changes are shown in a single pane of the split view. All of the unstaged changes are shown in the other pane.

This allows you to easily see exactly which changes are staged at any given time, and commit only those specific changes. A file can exist in both the staged and unstaged panes.

A single file with staged and unstaged lines

What other macOS Git GUI app or tool offers a commit/staging view similar to Split View Staging offered by SourceTree?

One popular Git GUI app, GitHub Desktop, apparently has no plans to support Split View Staging:

3

There are various free as well as commercial macOS Git GUI apps available as listed on Git SCM webpage. The listed tools differ in their performance and feature set. The list is a living document with new apps getting added over time.

As you are looking for a macOS app with support for granular staging/unstaging support, I'll list one free and one paid tool each here which I use/have used personally. I too am a heavy user of SourceTree, but keep up with it's minor annoyances.

1. GitKraken (Free):

GitKraken is a free macOS Git GUI client. Although it's not a native app, but it comes with extensive set of features. Along with adding new features, the team behind the client is constantly working on improving overall performance with frequent releases. It supports Split View Staging. More details here:

Unstage files by selecting a staged file and hitting the Unstage File button that appears. If you click on a file to view the diff, you can selectively unstage lines or hunks.


2. Tower (Paid):

Tower is a paid macOS Git GUI client. It's a native macOS app with excellent UX and performance. It is quite popular among software developers. It supports Split View Staging. More details here:

One of the things that make Git such a great tool is the ability to craft granular commits. With Git's staging area, you can determine which changes exactly you want to have in the next commit. Tower takes this one step further by allowing you to determine the exact chunks and even lines you want to add:

Select a changed file in the Working Copy list. In the diff view on the right, you can then select the exact chunks & lines you want to add to the next commit.

I personally use SourceTree and Tower.

I'd recommend you to give the various tools mentioned on Git SCM webpage a try and choose as per your liking.

No affiliation whatsoever to any of the mentioned apps. I am on a constant pursuit to select and use the best tools available for the job at hand.

  • Tower seems to offer a "Staged/Unstaged" toggle for individual files, but not for the entire set of files that are staged? I think that's the key to what I need - showing all of the files and lines that are staged, vs. all of the ones that are not. – pkamb Jan 23 at 21:49
  • @pkamb GitUp, a lightweight client offers the exact ability you are looking for. It lets you view the staged/unstaged file contents just like in SourceTree. – Nimesh Neema Jan 23 at 22:05
3

I've been using Fork (https://git-fork.com/ - it's free for Mac and Windows) for almost 6 months now, after leaving SourceTree behind. I think it works incredibly well. Updates are not frequent, but they do happen. There are a few things missing from SourceTree (for example, I cannot see if my commit was signed with my GPG key - I have to run a git command in the terminal to check - but the option to have commits signed IS there and it does work, IF you remember to enable it for every repository), but I've been using it every day for 6 months without a single slowdown or problem. I routinely have two windows open, with about 30 tabs between the two.

The built-in merge tool is very nicely done as well. It is efficient and lets me pick between the two sides which lines to keep from which source. The wording is a little bit confusing to me, but that's mostly because I cannot seem to remember which side is "mine" and which is "theirs" when fixing a merge conflict.

Edit: I should note that it has the ability to stage/unstage custom hunks. All you have to do is highlight the line(s) you want and click stage/unstage.

Here's a screenshot of the changes tab, since Fork's website has everything except this:

Changes tab

1

I personally use Sublime Merge. It has Stage File / Stage Hunk functionality you need. See a screenshot from their website:

Sublime Merge staging screenshot

Staged and unstaged files are then displayed on one page as two separate lists of files.

This client seems quite fast, as well as well designed — my most used commands are within a few clicks. In addition, it is available for Windows as well, which is a benefit for me, as I code in both environments.

Currently, Sublime Merge can be evaluated for free for an unlimited period, with some minor limitations in functionality (e.g., no dark mode) and a sporadic popup asking to consider purchase (Sublime Text style).

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .