Patching in git is rather straightforward, though the commands are not all that obvious and the man pages are not terribly intuitive. Patching is used to move commits from one repository to another indirectly.

Creating Patches

To create a patch, use git format-patch. It will spit out a series of patch files with one commit in each patch. Examples:

Only the newest commit:

git format-patch HEAD^

The last three commits:

git format-patch HEAD~3

The 4th through 2nd last commit:

git format-patch -3 HEAD~4

Only the commit deadbeef…

git format-patch -1 deadbeef

The last 10 commits, but without modifying the commit messages:

git format-patch -k HEAD~10

Checking Patches

Patches do not always apply correctly. Before using git am to apply a patch, it is always a good idea to check it first with git apply.

To see what a patch will change, run:

git apply --stat 0001-mypatch.patch

To see how a patch will apply, run:

git apply --check 0001-mypatch.patch

If you're confident the patch will apply and isn't changing anything strange, then apply it with git am.

Applying Patches

The easiest way to apply patches is with git am. To apply the patch 0001-mypatch.patch, run

git am 0001-mypatch.patch

To sign off patches as they are committed, use -s like so:

git am -s 0001-mypatch.patch

To fudge the commit date to be the same as the author date, use –committer-date-is-author-date like so::

git am --committer-date-is-author-date 0001-mypatch.patch