Home > Net >  Tool to apply only some changes in Git
Tool to apply only some changes in Git

Time:10-19

Say I have two files "version 1.py" and "version 3.py". I want to have a version in between "version 2.py" because for example, I made two changes (e.g. feature A and bugfix 1) and I don't want to commit both changes simultaneously, as that isn't considered good practice. What I did is, I had the diff open on one side of the screen and manually copied the changes I want into the Pycharm-IDE. So what is the workflow in this case? There should be a tool to do that, shouldn't it? I didn't found one. I would take any tool I find and is advanced enough, I would however prefer a way to do that in Pycharm or Git. I found emacs with patch files, however emacs doesn't take the original file so it don't know when you're trying to change the source file. That resulted in me corrupting the patch and then the patch not being accepted by git.

CodePudding user response:

If you made multiple changes to a file and you want to separate them into multiple commits, use git add -p. "p" for "patch". This will walk you through your changes one-by-one and ask if you want to stage them. Stage the ones you want.

git diff will show you your remaining unstaged changes.

git diff --staged will show you the changes you've staged.

If you want to test just your staged changes you can enter image description here

And you can use PyCharm to stage your unstaged changes. PyCharm calls this "shelving". See Use Git to work on several features simultaneously.


This works because in Git you build up what you want to commit in the "staging area". This is what git add does, it copies files to the staging area. When you git commit you commit what is in the staging area, not what is on disk.

For most tasks you can just git add . to copy everything to the staging area, or git commit -a to copy everything and commit. But you can also select what you copy. You can only stage certain files with git add <filename>. And you can only stage certain changes with git add -p.

  • Related