Many git commands have a interesting option
-p for short, it allows a user to go through every change and asks what to do instead of adding all changes in the file to a new index.
git add -p
Developer often edits the same file multiple times and generates too many changes in the file for a single function improvement, it’s not suitable to add the whole file to new index because other developers can’t review your code in a clear logic. The command
git add -p will help us to add partial changes for current commit. We can type ? to read the introduction for every sub-options for staging.
The most powerful option is
e, it supports to edit hunk and stage the new change. We can type
y if we want to stage the hunk or
n if the current hunk is not suitable for the next commit.
git stash -p
git stash saves local modifications away and make the working directory clean to match the HEAD commit. If we want to stash a few modifications rather than all changes in the current working path, just pass
-p to the command.
The workflow is similar to
git add -p, the only difference is the effect of two git commands. This one removes local hunk and the last command add hunk for a new commit. But relax,
git stash doesn’t delete the change forever, it can be recovered by
git stash apply.
git reset -p
We have the commit history for the project like the following image.
Now we want to reset the last commit content but retain a few changes. It’s time for
git reset -p to work for us, it can remove partial hunks on the commit, the last commit will be in history because we retained some hunks, it’s different from
Then we compare the current working status and HEAD commit, the applied hunk is regarded as a new line. But the commit
a41f76 has both lines, it’s not changed by reset command.
There are some similar commands such as
git checkout -p. The option patch gives these edit commands more flexible operations.
git log -p is a popular reading command, we can read changing details in every commit by it.