Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mattlewissf
Last active April 23, 2024 09:19
Show Gist options
  • Save mattlewissf/9958704 to your computer and use it in GitHub Desktop.
Save mattlewissf/9958704 to your computer and use it in GitHub Desktop.
Lightning Talk: Git add -p

git add -p is your friend

git add -p is basically "git add partial (or patch)"

Patch mode allows you to stage parts of a changed file, instead of the entire file. This allows you to make concise, well-crafted commits that make for an easier to read history. This feature can improve the quality of the commits. It also makes it easy to remove parts of the changes in a file that were only there for debugging purposes - prior to the commit without having to go back to the editor.

It allows you to see the changes (delta) to the code that you are trying to add, and lets you add them (or not) separately from each other using an interactive prompt. Here's how to use it:

from the command line, either use

  • git add -p
  • or you can use git add -i and choose type 5 or p (for patch).

Git will ask you which files you would like to partially stage; then, for each section of the selected files, it will display hunks of the file diff and ask if you would like to stage them, one by one:

here's a visual

At each point, you will be asked whether you want to "stage this hunk". Here are the commands you can use: ####commonly used commands

  • y - stage this hunk
  • n - do not stage this hunk
  • 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

####more advanced commands

  • 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

Some cool tips from the internet:

  • If git presents you with a chunk larger than what you would like to add, you can use the "e" interactive command to specify the exact lines that you want added or removed. This is probably the most powerful option. As promised, it will open the hunk in a text editor and you can edit it to your hearts content
  • Split the hunk into smaller hunks. This only works if there’s unchanged lines between the changes in the displayed hunk, so this wouldn’t have any effect in the example above
  • git reset -p works in a similar way
  • git commit -p it combines git add -p and git commit in one command.
@jun-jing
Copy link

Thanks, really help.

@taylor-literaseed
Copy link

Nice. Could use a reference to q for completeness (quit and do not stage anymore hunks) but otherwise great!

@juanelfers
Copy link

Thanks!

@Kabanosk
Copy link

Kabanosk commented Jun 9, 2022

Thank you!

@LeDuble
Copy link

LeDuble commented Jul 1, 2022

This is really good! Thank you very much! Do you have examples from good use cases?

@barel-mishal
Copy link

Great article thanks a lot

@mariuszste
Copy link

awesome

@rodigu
Copy link

rodigu commented Nov 10, 2022

very helpful

@Yangiboev
Copy link

Thank you! It was helpful!

@iammike
Copy link

iammike commented Jan 16, 2024

Was about to write this article myself, Googled, found you already did it, and have saved myself the trouble and instead linked to you. Thank you! This "trick" is probably my favorite of the last year.

@LukeberryPi
Copy link

very useful!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment