Personally I use sublime merge or command line for everything. The sublime merge/text interactions are really nice, being able to right click in a diff and have it open the file at the line. You can try them for free forever but the price may be a deterrent since the dark theme for merge is locked behind a license key.
Also, when on command-line, I recently discovered `git add -i` for interactive mode (asks you about individual hunks and lets you "split" them), and `git add -e` (lets you edit the patch however you want).
1. git add -i or -p 2. History edits using interactive rebases 3. Using tools like lazygit or git-ui 4. Using stacked patch tools like stgit or topgit 4. Here is my favourites: Use magit on emacs or fugitive on vim
The last one on magit and fugitive feels like interactive addition is closer to editing 2 files.
I work at Tower and I recently put together a "Tower versus Sourcetree" comparison page (there are many features that Sourcetree is missing): https://www.git-tower.com/compare/sourcetree/
I hope you give Tower a try! :)
or by right clicking in the diff pane in git-gui (which is almost never mentioned).
Although I use the cli more, gitk and git-gui solve all my GUI needs.