Increase git hunk granularity
As @codeWizard said in his answer, git just doesn't support what you want, and it hence can't be done in git add
.
Now, you could write a script yourself that does the following:
- copy your locally changed version of to somewhere outside the tree
git checkout -- <changedfile>
to bring your modified file to an unmodified state- write a user interface of your own to select ranges in the file that you want to add now
- add the modifications to the in-tree .
- git commit
- If desirable, go to 3. again
git gui
lets you select specific lines to stage.
Open git gui
in your git repository, then right click on the desired line > "Stage Line For Commit".
Now, it will not let you edit a file (I wish it could open a temporary file in your favorite editor). To work around this, you can simply mark the commit message with a reminder:
AMENDME: Add x
do not forget to rename thing
When you are done with your coding stretch, you can use git rebase -i <original branch>
, mark the "AMENDME" commit with the edit
command and amend that commit.
It cant be done,
These are the options you can do within add -p
:
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 and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining 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
Once you use the s
it will pick the chunk of code which can be considered as a standalone change. If you want to split it even more you will have to use the e
to edit the hunk and then add it back to the stage area.
Summary:
To split hunks you use the s
flag.
If you need to split it into even smaller chunks you will need to manually edit it using the e
option.