The differential is:
$$
df(x)\cdot h = \frac{1}{2}(x^tMh +h^tMx)+b^th
$$
To get the gradient, express this linear form using the scalar product :
$$
df(x)\cdot h = \frac{1}{2}\langle x,Mh \rangle +\frac{1}{2}\langle h,Mx\rangle+\langle b,h \rangle = \langle \frac{1}{2}(M + M^t)x+b,h \rangle
$$
By consequence the gradient $\nabla f$ is the vector :
$$
\nabla f_{|x} = \frac{1}{2}(M + M^t)x+b
$$
If $M$ is symmetric this reduces to
$$
\nabla f_{|x} = Mx+b
$$
Rational: if $f:\mathbb{R}^n\rightarrow \mathbb{R}$, then the differential at $x$, $df(x)$ is a linear form $\in\mathcal{L}(\mathbb{R}^n,\mathbb{R})$. But we know (1) that there exists a vector $v$ such that $df(x)\cdot h = \langle v_x, h \rangle$. This vector $v_x$ is by definition the gradient at $x$, denoted by $\nabla f_{|x}$
(1) Riesz representation theorem