The notion of fixing a gauge I don't understand the notion of gauge fixing; can we choose any gauge or are there some restrictions? 
For example why can we choose $\nabla\phi = 0$ here:
https://physics.stackexchange.com/q/188778/
 A: It's first important to note that in classical electromagnetism, the $\mathbf{A}$ and $\phi$ fields are not physical in the same way that the $\mathbf{E}$ and $\mathbf{B}$ are. We can't measure them and they aren't uniquely defined.
Gravitational potential energy is a good analogy. Suppose an object is on a table a height $h$ above the ground. We could say that the object has potential energy $U=mgh$, picking the floor to be $U=0$, or that the object has potential energy $U=0$, picking the table to be where $U=0$. In fact, we could choose the gravitational potential energy to be any $U=mgh+C$ for any $C$, as long as we use the same definition of potential energy in the same problem.
Just like we can add any constant to the gravitational potential energy, we can add some additional vector field $\mathbf{V}$ to $\mathbf{A}$. Let's define the new vector potential $\mathbf{A'}=\mathbf{A}+\mathbf{V}$. By the definition of the vector potential, we know $\nabla \times \mathbf{A'} = \mathbf{B}$. Using the properties of the curl, we find $\nabla \times \mathbf{A'} = \nabla \times \mathbf{A} + \nabla \times \mathbf{V} = \mathbf{B}$. However, we know $\mathbf{B}=\nabla \times \mathbf{A}$, so we can write $\mathbf{B}+\nabla \times \mathbf{V} = \mathbf{B}$. Therefore, we see that we can add any $\mathbf{V}$ such that $\nabla \times \mathbf{V}=\mathbf{0}$. Because of an identity in vector calculus, we know that any curl-less vector field can be written as the gradient of a scalar field, say $\psi$.
When we go through the math we find that when we change $\mathbf{A}$ to $\mathbf{A'}=\mathbf{A}+\nabla\psi$ we have to change $\phi$ to $\phi'=\phi-\frac{\partial \psi}{\partial t}$.
So we don't have infinite freedom in gauges. We have the freedom to choose any scalar field $\psi$ and then transform $\mathbf{A}$ and $\phi$ as above. The two most popular gauge choices are the Coulomb and Lorenz, which are detailed in the Wikipedia article you linked to in your question.
A: Try and think about the gravitational potential on Earth $V(x)$. If you add a constant in space to the potential $V(x)+c$, its gradient $F=-\nabla V(x)$ remains unaltered. So the description of physical observables (the forces) in terms of potential is somewhat overabundant.
When you solve a problem of a falling object on earth, you usually put the potential at sea level $V=0$. This is, in my opinion, the gauge fixing procedure in the most simple case.
The same holds for electromagnetism. As the Maxwell equations contains fields and sources with differential operators, you must check if there is any change in potentials choice, that leaves the fields unaltered.
This is the gauge invariance, and it is a strict consequence of your attempt to describe the physics of $E$ and $B$ using a vector potential and a scalar potential $\vec{V},\phi$. Check the wikipedia page mentioned above for the degree of freedom you have when fixing a gauge.
So, miming the gravitational potential fixing, you should use the gauge fixing procedure in the most convenient way for the given problem (that is, as suggested, $\phi=0$, and, consequently $\nabla\phi=0$, as in the temporal gauge).
