To answer the original question about how to cherry-pick some directories (as commits instead of a brute-force checkout), this is possible.  Imagine that featureA has diverged from master and you want to bring over the tools/my-tool commits.
Assuming that you never made any commits that contain both stuff from /tools/my-tool and stuff from other directories
This will get you the list of commits to master in tools/my-tool (that are not already in featureA), in reverse-chronological order:
git log --no-merges featureA...master tools/my-tool
To say it another way:
git log --no-merges source_branch...dest_branch my/firstpath my/secondpath [...]
To get just the commits you need in chronological order, you need to first reverse the order of the input lines (such as with tail -r or tac), then isolate the column for the commit hash (such as with cut):
git log --format=oneline --no-merges featureA...master tools/my-tool \
    | tail -r \
    | cut -d " " -f 1
And to do the whole operation at once, do this:
git cherry-pick $(git log --format=oneline --no-merges featureA...master tools/my-tool | tail -r | cut -d " " -f 1)