Skip to content

Instantly share code, notes, and snippets.

@nepsilon
Last active November 14, 2024 09:35
Show Gist options
  • Save nepsilon/22bc62a23f785716705c to your computer and use it in GitHub Desktop.
Save nepsilon/22bc62a23f785716705c to your computer and use it in GitHub Desktop.
How to generate and apply patches with git? — First published in fullweb.io issue #33

How to generate and apply patches with git?

It sometimes happen you need change code on a machine from which you cannot push to the repo. You’re ready to copy/paste what diff outputs to your local working copy.

You think there must be a better way to proceed and you’re right. It’s a simple 2 steps process:

1. Generate the patch:

git diff > some-changes.patch

2. Apply the diff:

Then copy this patch to your local machine, and apply it to your local working copy with:

git apply /path/to/some-changes.patch

And that’s it! The changes are now in your working copy and ready to be staged/commit/pushed :)

@ssi-anik
Copy link

ssi-anik commented May 23, 2023

If you run git diff it will show changes that were tracked previously. But newly added files are not shown in the diff. To create a patch, I did the following.

  • git add -A # Add everything to the staging area.
  • git diff --staged --patch > changes.patch # --staged shows all the changes including new files
  • git reset # Reset to the old state

Now, I can apply the changes.


Edit: I just checked git diff --staged --patch and git diff --staged by creating two new patch files, and comparing them with the diff command. I don't find any difference.

@BobToninho
Copy link

@ssi-anik Didn't think about untracked files—I always forget about them when thinking about git command, thanks!

I believe you can simplify your solution even more by using intent-to-add like this:

git add --intent-to-add --all
# or
git add -NA

@mrpointzby
Copy link

mrpointzby commented May 10, 2024

I can export the code change to .patch file, but the change only include the main part, Now I change the submodule and want to export the code change in submodule to the same .patch file so that I can apply the patch file for all code changes on new project including the submodule part, are there some commands to do this?

@rajavelraj
Copy link

Hi

@rajavelraj
Copy link

Git format-patch- 1- head

@JulienCochuyt
Copy link

@MayuriVidekar, same error here on Windows. I'm pretty sure it used to work. Resorting now to git checkout -p the stash rev.

@KoltesDigital
Copy link

@MayuriVidekar @JulienCochuyt surely you're using PowerShell < 7.4. Upgrade or see https://stackoverflow.com/a/70283963/14098985 for workarounds.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment