Git fast forward merge is FORWARD in terms of TIME. The pointer goes from older to newer commits.
Example (by ffwd merge master pointer is moved from commit D to commit G):
Before fast-forward merge:
master
|
A<--B<--B<--D<--E<--F<--G
|
new_branch
After fast-forward merge:
master
|
A<--B<--B<--D<--E<--F<--G
|
new_branch
But, since the commit pointers point from newer to older, in terms of these pointers strictly, the branch pointer goes backwards... upstream the commit pointers. So in that sense, it can be labeled a fast-reverse merge. Upstream (the term from ProGit book, chapter on merging) refers to reverse flow, up-the-stream, so explaining upstream flow as a fast forward thing can confuse newcomers. So, it's:
Upstream in terms of commit pointers.
Forward in terms of commit time.
Does this reasoning make sense?