On Wed, Oct 19, 2016 at 3:42 PM, Jeff King <peff@xxxxxxxx> wrote: > On Wed, Oct 19, 2016 at 03:26:18PM -0700, Jacob Keller wrote: > >> 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 > > I'd usually do one of: > > # undo selectively > git reset -p HEAD^ > git commit --amend AHA! I knew about git reset -p but I didn't know about git reset -p allowed passing a treeish. Does this reset modify my local files at all? I think it doesn't, right? > > or: > > # roll back the whole commit > git reset HEAD > # do it right this time > git add -p > # and steal the commit message from the previous attempt > git commit -c HEAD@{1} > > -Peff Also nice to know about git commit -c Thanks a lot! This should save me some headaches. I still think it's worth while to add a check for git-commit which does something like check when we say "git commit <files>" and if the index already has those files marked as being changed, compare them with the current contents of the file as in the checkout and quick saying "please don't do that" so as to avoid the problem in the first place. A naive approach would just be "if index already has staged differences dont allow path selection" but that doesn't let me do something like "git add -p <files>" "git commit <other files>" We could even make it work so that "commit --only" doesn't run this so that way people can easily override, and we can give suggestions for how to fix it in the output of the message. I can't really think if a reasonable objection to such a change. I'll try to code something up in the next few days when I can find some spare time. Regards, Jake