I want to be able to take a bunch of patches that were applied to one semi-related branch and appened them to the current branch, or better yet a new branch of the current. The bunch of patches will be selected by what they change; I should be able to graft all patches that modify some file, or modify some regular expression.

Here is what I mean:

 ,-----X---X---X---X--- ... ---             "historical" branch
o
 `--------------------Y                     "current" branch
                       \
                        `---Z---Z---...     "working" branch

You start off at current branch and run something like:

git-find historical --file some_file.c --or --re 'some pattern' \
| git-graft --new-branch working -

This will let me take the interesting subset of X commits and apply them at some point Y. Should the patches X cause conflicts with the current branch, then git-graft needs to let the user resolve those conflicts a patch at a time. The default is to apply onto the current branch, however if desired it should be possible to create the changes on a new, working, branch. The result is a new set of Z commits, as shown above.