Here is a geometric way to see this. To any ordered basis $(v_1,v_2,\ldots,v_n)$ of your vector space $V$ associate the "flag" of subspaces $V_0=\{0\}$, $V_1=\langle v_1\rangle$, $V_2=\langle v_1,v_2\rangle$, ... $V_n=\langle v_1,v_2,\ldots,v_n\rangle=V$. The Gram-Schmidt algorithm turns any such basis into an orthonormal basis $(b_1,\ldots,b_n)$ that gives rise to the same flag of subspaces. It is moreover the unique such basis (orthonomal and with the same flag) for which in addition each $b_i$, inside $V_i$, is on the same side of the hyperplane $V_{i-1}$ as the original basis vector $v_i$.
Now taking $V=\Bbb R^n$ we can identify $GL_n^+(\Bbb R)$ with the set of ordered bases $(v_1,v_2,\ldots,v_n)$ with $\det(v_1,v_2,\ldots,v_n)>0$, and $SO(n)$ with the set of ordered orthonormal bases $(b_1,b_2,\ldots,b_n)$ with $\det(b_1,b_2,\ldots,b_n)>0$. Now for such a basis $(v_1,v_2,\ldots,v_n)$ let $(b_1,\ldots,b_n)$ be the orthonormal basis associated to it under Gram-Schmidt, and simultaneously (or successively if you prefer) deform every $v_i$ linearly to $b_i$, as $t\mapsto (1-t)v_i+tb_i$. The intermediate vectors stay inside $V_i$, and since $b_i$ is on the same side as $v_i$, they never enter $V_{i-1}$. This means the deformed vectors stay linearly independent at all times, so the deformation takes place inside $GL_n(\Bbb R)$. As the determinant cannot vanish anywhere we have $\det(v_1,v_2,\ldots,v_n)>0\implies \det(b_1,b_2,\ldots,b_n)>0$ and we have a deformation retract of $GL_n^+(\Bbb R)$ to $SO(n)$. It is in fact a strong deformation retract: elements of $SO(n)$ remain fixed.