From the official documentation
Interactively choose hunks of patch between the index and the work tree and add them to the index. This gives the user a chance to review the difference before adding modified contents to the index.
This effectively runs add --interactive, but bypasses the initial command menu and directly jumps to the patch subcommand. See “Interactive mode” for details.
git add -p allows you to pick which chunks of code are going to be staged from all your current changes.
I use this all the time to avoid committing something unintended.