Last Updated: February 25, 2016
·
2.113K
· borisguery

Stage (or unstage) only some part of a file with git

Sometimes you want to only stage some part of a change to split up into separate commits.

This is what git stage --patch|-p is designed for:

It will popup a text ui where you can see your change as a diff. Each "big parts" is automatically splited by git into small hunks.

Here a summary of the available command:

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk nor any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk nor any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

To unstage, follow same workflow but use git reset --patch