I routinely have open at least one of two Git GUI interfaces; GitHub for Mac (aka GH:Mac) and [Atlassian SourceTree]http://www.sourcetreeapp.com). They each have their uses; GitHub for Mac is drop-dead simple, deliberately eschewing the level of detailed features of SourceTree. (For example, I don’t think it’s possible to cherry-pick commits using GH:Mac; in SourceTree, it’s very straightforward.)

Another major gotcha (gitcha?) in GH:Mac is when you’ve added an updated file to staging, and then made further changes to that same file. Let’s say you wind up with something like this:

In the Terminal window:

$ git status
On branch issue-89
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   app/services/post_update_validator.rb
    new file:   spec/services/post_update_validator_spec.rb

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   app/services/post_update_validator.rb
    modified:   spec/services/post_update_validator_spec.rb


In GitHub for Mac

GitHub for Mac screenshot

Note that the new files, as staged, are shown, but the changes since staging are not.

In SourceTree

SourceTree for Mac screenshot

Each of the two files is listed twice, as was the case at the command line. With GH:Mac, if I were to make the displayed commit, I would then be shown the unstaged versions of the files. Likely not what I want.


Jeff Dickey

Software and Web developer. Tamer of deadlines. Enchanter of stakeholders.