Hi, I recently (and in the past) had an issue where I was using git add --interactive and accidentally did something like the following: # hack lots of randmo changes, then begin trying to commit then separately git add -i # set only the changes I want # accidentally add <file> to the commit $git commit -s <file> # type up a long commit message # notice that I committed everything At this point I'd like to be able to do something like: $git unstage -i # select each hunk to unstage and end up with a commit that only has what I originally wanted, without having to re-write the commit message, nor having to do a lot of weird things, or anything. I can ofcourse use reset HEAD^ and lose my commit message, but then I'd have to retype that out or copy paste it from somewhere else. I ended up doing something like: # save the current tree $git rev-parse HEAD >savetree # checkout the old files and re-write $git checkout HEAD^ <file> # update commit removing all changes from this file $git commit --allow-empty --amend <file> # now checkout the tree again to the contents of the saved tree $git checkout $(cat savetree) <file> # now add only the parts I wanted before $git add -i # finally amend the commit $git commit --amend That's a lot of steps and forces me to save my own file. I thought of a few alternatives: 1. Create an advice setting which basically allows me to say "git, please prevent me from staging files + an index if the files I marked also conflict with paths already added to the index, maybe unless I passed a force option" or 2. somehow streamline the process of what I did above so I could just do something like: git commit --amend --set-tree=HEAD^ which would force the commit tree up one and avoid the double checkout stuff, without actually changing my checked out copy at all Then I'd be able to quickly re-add what I wanted. 3. somehow allow an unstage option. So for the TL;DR; .. does anyone know of any tools which would help automate the process so I could simply do "git uncommit -i" and run a tool just like git add interactive or git add -p? Thanks, Jake