You can use a branch to accomplish P1 and P2. Create a branch for the group of logically related changes. Commit as often as you want (P1). When all are done with the group of related changes (P2), merge back to base branch.
Git branching is lightweight so I don't see how it can't be used to support P1 and P2.
Git branching is lightweight so I don't see how it can't be used to support P1 and P2.