I want to take a function out of one file and put it into another, but keep the blame history.
cp a.php b.php
vim b.php
# delete everything but 1 function
vim a.php
# delete the 1 function
git add a.php b.php
git commit
But if I run git blame b.php
I only see it blaming to this new commit.
Perhaps this previous SO question could be informative:
How does git track source code moved between files?
To paraphrase the accepted answer: essentially, Git doesn't actually "store" moved code; when generating things like blames for moved code, that's done ex post facto by examining the state of the entire repository from commit to commit.