Reputation: 3758
I work on WordPress based project and I want to patch my project at each new release version of WP. For this, I want generate a patch between two commits or tags.
For example, in my repo /www/WP
I do this:
$ git patch-format com1..com2 --stdout > '~/patchs/mypatch.patch'
# or
$ git patch-format tag1..tag2 --stdout > '~/patchs/mypatch.patch'
/www/WP
git natif WordPress
/www/myproject
My git project WordPress based
The git apply
command line doesn't work, I think because we are in different repositories.
Can I generate a patch file without a commit, just a differential and apply it to another git repository?
Upvotes: 306
Views: 342788
Reputation: 309
Here, you can follow the below instructions.:
Upvotes: 0
Reputation: 679
Make use of this command.
git diff master..localbranch > file.patch
Upvotes: 4
Reputation: 166823
To produce patch for several commits, you should use format-patch
git command, e.g.
git format-patch -k --stdout R1..R2
This will export your commits into patch file in mailbox format.
To generate patch for the last commit, run:
git format-patch -k --stdout HEAD~1
Then in another repository apply the patch by am
git command, e.g.
git am -3 -k file.patch
See: man git-format-patch
and git-am
.
Upvotes: 78
Reputation:
You can apply two commands
git diff --patch > mypatch.patch
// to generate the patch`git apply mypatch.patch
// to apply the patch`Upvotes: 59
Reputation: 25223
You even can do patches only for sub directory you are currently in. Just add .
git format-patch -k b365cce8..80a2c18a .
Then you can apply them:
git am *.patch
See this answer for details
Upvotes: 3
Reputation: 11085
As a complementary, to produce patch for only one specific commit, use:
git format-patch -1 <sha>
When the patch file is generated, make sure your other repo knows where it is when you use git am ${patch-name}
Before adding the patch, use git apply --check ${patch-name}
to make sure that there is no confict.
Upvotes: 3
Reputation: 59973
You can just use git diff
to produce a unified diff suitable for git apply
:
git diff tag1..tag2 > mypatch.patch
You can then apply the resulting patch with:
git apply mypatch.patch
Upvotes: 442