[[!meta title="Splitting overly large hunks in patches"]] [[!meta author="rohieb"]] [[!meta license="CC-BY-SA 3.0"]] [[!img defaults size=x200]] Today I stumbled over a lengthy patch on my harddisk. It was about half a year old, and consisted of only one hunk, which was about 1000 lines in length. Most of the contents were indentation changes from tabs to spaces, but I knew that the patch contained a small useful portion, which I wanted to extract. What was slightly more annoying was the fact the the patch did not apply cleanly to the file it was supposed to change, and `patch` only applies hunks atomically, the whole patch was rejected. Since I did not want to compare each of the lines in the patch visually and decide whether they changed only whitespace, I tried to look for a way to split the patch into smaller hunks. My first try was looking at the useful tool in the [patchutils](http://cyberelk.net/tim/software/patchutils/) package, but none of them did what I wanted, they only allowed me to split patches into single hunks (but my patch already had only one hunk). But after a bit of googling, I found out that Emacs has a [`diff-split-hunk`][emacs-dsh] command, so I installed Emacs (for the first time in my life), opened my patch, selected Emacs' Diff mode with `M-x diff-mode`, and split the patch into smaller hunks by pressing `C-x C-s` on appropriate context lines. After saving, the patch applied cleanly except for two smaller hunks, which I could easily identify as containing only whitespace changes. Then I could compare my patched file with the original file, this time ignoring whitespace changes with `diff -w`, and, voilĂ , I got the seven useful lines I wanted. [emacs-dsh]: https://www.gnu.org/software/emacs/manual/html_node/emacs/Diff-Mode.html For illustration, see the different [[edit stages of my patch|edit-stages]] on a separate page. [[!tag patch patchutils diff GNU Emacs QDjango C++ howto]]