I am working on a windows laptop, so getting jekyll to work correctly seems to be troublesome. So before pushing changes to my repository, I would like to check them on a jekyll docker image running on my NAS. Using the “git format-patch” command, we export out commits and apply them on our jekyll docker image to build and html-proof our site.
First of all start with a new branch:
$ git checkout -b test_build Switched to a new branch 'test_build'
In the “test_build” branch, we’ve made some minor fixes and add a new article.
$ git log --pretty=oneline -2 ea88d654638714c54ede324244ce17bc456365ef Fixed highlighting code 9afa570100bd49b992e636f0d530fa4125d8c507 Fixed links in carousel
Create a single patch file, instead of patches per commit:
$ git format-patch master --stdout > small_fixes.patch
Or make a patch containing the last two commits:
$ git format-patch -2 --stdout > small_fixes.patch
To apply the patch, first check what is in the patch:
$ git apply --stat small_fixes.patch _includes/carousel.html | 4 ++-- _posts/2017-08-25-exploring-upnp.md | 8 ++++---- _posts/2017-08-26-netcat-without-e.md | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-)
Then check whether the patch gives any problems when applying:
$ git apply --check small_fixes.patch
Now apply the patch for real. Use “git apply” to apply the patch as single item and have all applied changes as unstaged changes. Use “git am” to apply every commit in the patch also on the target location. This way history is preserved and this is usually the preferred approach. With “git am” you can use the “--signoff” option to add “Signed-off-by:” line to the commit message, so it is clear who is responsible for adding the commits to the code. For now, we don’t need the “--signoff” option.
$ git am < small_fixes.patch Applying: Fixed links in carousel Applying: Fixed highlighting code
All commits are applied successfully. Now test whether everything works fine and the changes can be pushed to the repository.