Difference between pushforward and differential

The confusion can be resolved by understanding the diffeomorphism $T_q\mathbb{R}\cong\mathbb{R}$: every derivation $C^\infty(\mathbb{R})\to\mathbb{R}$ based at the point $q\in\mathbb{R}$ comes in the form $t\,\frac{\partial}{\partial x}|_q$ for some $t\in\mathbb{R}$. The diffeomorphism $T_q\mathbb{R}\to\mathbb{R}$ can therefore be thought of as "evaluate the identity $i:x\mapsto x$".

Let $f:M\to\mathbb{R}$ be smooth. Thinking of $f$ as a map of manifolds, its derivative $f_\ast:T_p M\to T_q \mathbb{R}$ is defined by $f_\ast(X)(g) = X(g\circ f)$, just as you say. Now observe $$f_\ast(X)(i) = X(i\circ f) = X(f) = df(X).$$