The Journal shows a compact history (Log) for the current branch:
- orange commits denote ahead commits which are just present on your local branch but not yet on the remote branch. These commits will be sent to the remote branch/repository for the next Push.
- green commits denote incoming commits which are only present in the remote branch and will be integrated into your local branch for the next Pull.
- black commits with green connectors denote commits which are currently present in the remote branch only, but have been present in your local branch at an earlier time. Usually, these are commits which have been rewritten using Rebase. To show such commits, invoke Show Rewritten Commits from the options menu.
- black commits with blue connectors denote commits from the auxiliary branch which can be toggled using Show Auxiliary Branch from the options menu.
- black commits with gray connectors denote commits which are common to more than one of the local, remote or auxiliary branch.
Depending on the type of commit(s) selected, you can invoke various operations from the context menu, most notably, you can easily rewrite the history:
- To squash adjacent commits, select them and invoke Squash Commits and provide the new commit message.
- To reorder commits, just use drag and drop.
- To coalesce two (not necessarily adjacent) commits with the same commit message, drag one of the commits onto the other one.
- To change the commit message, select the commit and invoke Edit Commit Message.
- To change the author, select the commit and invoke Edit Author.
The behavior of how commit times will (or will not) be adjusted can be configured by system properties (smartgit.pushableCommits.preserveAuthorDate).
To just change the commit message of the last commit (even for a merge commit or if the working copy is not clean), invoke Local|Edit Last Commit Message.
Modify or Split Commit
To amend something to a selected (unpushed) commit, use the Modify option. This will start an interactive rebase and stop after the selected commit. Perform the modification and then click Commit/Continuetoolbar button, select Create Commit and in the Commit dialog select the Amend last commit checkbox. Now click again Commit/Continue toolbar button and select Continue Rebase. If you want to abort the rebase going back to the previous state, use the Abort toolbar button.
To split 1 selected (unpushed) commit into 2 commits (with the same message), use the Split option. This will start an interactive rebase and stop with the commit's changes in the Index. Discard all changes that you don't want to have in the first commit, click Commit/Continue and select Continue Rebase. Normally this should be sufficient, but it might be necessary to fix potential conflicts in the next commit.
For the split command, the interactive rebase stops after the selected commit, a
git reset --soft ^HEAD is performed to put the commit's changes into the Index. After selecting Continue Rebase, the commit is applied a second time to add all the remaining parts that were not committed in the first commit, followed by the further commits.