zatamine
zatamine

Reputation: 3758

Create patch or diff file from git repository and apply it to another different git repository

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

Answers (7)

MannaICT13
MannaICT13

Reputation: 309

Here, you can follow the below instructions.:

  1. Checkout the branch which you want to patch.
  2. git format-patch <branch_ name> -o <folder_name> where <branch_ name> where you want to apply the patch and <folder_name> is a simple folder name where the created patches store.
  3. Checkout the branch where you want to apply the patch.
  4. git am <folder_name>/*.patch

Upvotes: 0

Kasthuri Shravankumar
Kasthuri Shravankumar

Reputation: 679

Make use of this command.

git diff master..localbranch > file.patch

Upvotes: 4

kenorb
kenorb

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

user7396942
user7396942

Reputation:

You can apply two commands

  1. git diff --patch > mypatch.patch // to generate the patch`
  2. git apply mypatch.patch // to apply the patch`

Upvotes: 59

Eugen Konkov
Eugen Konkov

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

Eugene
Eugene

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

Enrico Campidoglio
Enrico Campidoglio

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

Related Questions