Git undo partial changes to a file

git, merge, undo

Solution

There's another way to do this that doesn't require the patch file at all.

The problem happened going from `A` to `B`, so first revert the changes in `B` but don't automatically commit.

$ git revert --no-commit <commit hash of B>

The changes that `git revert` would do are staged. Unstage them.

$ git reset HEAD

Next, interactively go through `file.txt` and stage only the changes you want to keep.

$ git add --patch file.txt

Only the reverts you selected are now staged. Commit them.

$ git commit

Finally, clean up the unstaged leftovers from `git revert`.

$ git reset --hard

Problem

How do I undo a part of the changes applied to a file that happened a while ago. I have the following commits and the accidental changes happened between `A` and `B` to `file.txt`: ``` ...--A--B--... ``` I have a diff patch of the file in `file.txt-B-A.patch` which reverts all changes. However I only want to undo certain changes in `file.txt`, much like manually picking changes in a merge conflict. Is there a way to do so without modifying the patch file?

Original source

Related problems