How to create a single patch from different git commit

Alberto Vena

24 Nov 2011 Development, Git

Alberto Vena

1 min
Git branch

We don't like to write the same code multiple times. If you have to apply any changes to projects that share files (the files you are editing), you can use git to accomplish this boring task. This is the hypothetical directories structure where the 2 repositories of this example is located:

-- projects/
  |---first_repo_path/
  |---second_repo_path/

Create the patch

We can start looking for what commit we would like to start to create the patch with. Let's enter into the first repo and show the last commits:

$ cd projects/first_repo_path/
$ git log --pretty=oneline --abbrev-commit -3
a5f83e3 fixes security bug #123
789f90c fixes security bug #98
48c120e fixes problems with rails_admin

The second command print some important details on our commits. We can now detect our commit target ("789f90c" in our example) and create the patch with the command:

git format-patch -M 789f90c --stdout > fixes_security_bugs.patch

This will create the file fixes_security_bugs.patch the incapsulate the changes of the last two commits.

Apply the patch to other repository

To apply the patch to the other repository, we can move to his root and launch this command:

$ cd ../second_repo_path/
$ git am --signoff < ../first_repo_path/fixes_security_bugs.patch

Done!

Resolve possible conflicts

If there are any problems and the patch application fails no changes will be applied to the second repository. We can solve conflict using:

git apply --reject --whitespace=fix fixes_security_bugs.patch

that allows to apply only changes that don't create conflicts. Refused code will be placed in .rej files that we can manually apply to our original code.

You may also like

Let’s redefine
eCommerce together.