How to edit Git "add patch" hunks/diffs/lines during selective staging?

bart picture bart · Feb 25, 2010 · Viewed 7.9k times · Source

I have a source file where 2 features have been added. In order to allow cherry-picking, I'd like to commit that in 2 phases: one for each feature. Until now, in similar situations, using git add -p served me well, to commit one feature while leaving the local files in their final stage.

However, I now have the problem that git add -p wants to stage a hunk that includes edits for both features. Even though the edits are on separate lines, s (for "split") no longer wants to split up the hunk into smaller pieces...

In short: I can't separate the changes for the 2 features this way. Is there a way to manually edit the patch, for example using vi, without actually changing the original file?

Answer

Dan Moulding picture Dan Moulding · Feb 25, 2010

As Alan says, edit the patch by pressing e (instead of s) during git add -p. This will launch your editor with that hunk of the patch so that you can manually edit it. There are comments within the text that explain how to properly discard modifications and it's actually pretty easy.

When you are done, note that you can test it with only the changes you've just added by doing git stash --keep-index. The changes you did not add to the index will be stashed away and you are now free to test just the changes that you are about to commit. When done, simply git stash pop or git stash apply to get the other changes back.