There\'s git add -p
to stage changes and git checkout -p
to discard changes interactively. How can I unstage changes from index by hunks?
I found this answer very helpful when learning staging, so I thought I'd modify it for unstaging, as I haven't found a thorough answer on stackoverflow to this "How to git unstage one line or part of a file?" question.
As @manojlds says, you can use git reset --patch
(or -p
for short), and git will begin to break down your file into what it thinks are sensible "hunks" (portions of the file).
Git will then prompt you with a variant of this question:
Unstage this hunk [y,n,q,a,d,g,/,j,J,k,K,s,e,?]?
Here is a description of each option:
NOTE ABOUT e MANUAL EDITING: Be extra careful when using the edit (e) mode above as it is not intuitive. I'll include and then revise the in-line git documentation:
# To remove '+' lines, make them ' ' lines (context).
# To remove '-' lines, delete them.
# Lines starting with # will be removed.
Revised for clarity:
+
are lines currently staged to be added which will now be unstaged. To keep +
lines from being unstaged (i.e. to leave them as staged changes), replace the initial +
with a space character.-
are lines currently staged to be deleted which will now be unstaged. To keep -
lines from being unstaged (i.e. to leave them as staged changes), delete each line entirely.Afterwards, you can use:
git diff --staged
to check that you unstaged/staged the correct changesgit add -p
to stage mistakenly removed hunksgit commit -v
to view your commit while you edit the commit message.Reference for future: Git Tools - Interactive Staging