Perform an interactive rebase including the target commit (e.g.
git rebase -i <commit-to-split>^ branch) and mark it to be edited.
When the rebase reaches that commit, use
git reset HEAD^to reset to before the commit, but keep your work tree intact.
Incrementally add changes and commit them, making as many commits as desired.
add -pcan be useful to add only some of the changes in a given file. Use
commit -c ORIG_HEADif you want to re-use the original commit message for a certain commit.
If you want to test what you're committing (good idea!) use
git stashto hide away the part you haven't committed (or
stash --keep-indexbefore you even commit it), test, then
git stash popto return the rest to the work tree. Keep making commits until you get all modifications committed, i.e. have a clean work tree.
git rebase --continueto proceed applying the commits after the now-split commit.