Normally, GPIO pin is not connected to anything so it's value is not possible to reliable detect it's state. It is said, that this state is floating as in this state, value of GPIO pin can change depending on some unpredictable external events.
Now, you can connect switch (or bush button) with one side to GPIO pin and one to the ground (GND). This way, if you push the button, GND will be connected to GPIO and it's state will be low. If you release the button, GPIO wont be connected to anything again (so it will have floating state).
So you need to somehow make your GPIO be connected to high voltage when your push button is released. This is called pull-up as when you do this, this will pull your voltage up.
But how to do this? You have to connect your GPIO to 3.3V. This way, when if your button is released, GPIO will have state high (3.3V). If you push your button, it will be connected to both 3.3V and GND. Current will flow from 3.3V to GND leaving GPIO at 0V (state low).
There is one problem, however. You have almost no resistance in your circuit so the current that will flow will be very thing (so called short circuit). That's bad. And this is why you need resistor, a pull-up resistor. It will limit current flowing from 3.3V to GND or GPIO pin.
How big resistor should be? Big enough to limit current to the value that won't damage GPIO pin, won't blow your input fusses on RPi or make input voltage drop to the value that will make your RPi reboot. In case your RPi would be powered from batteries, you would also like not to take too much current so the battery will last longer. It can't be to high, however, since RPi may have problems with detecting high voltage in the input. So to be on safe side, let's say that its resistance should be measured in kilo ohms :)
Now you should imagine what is internal pull-up resistor. It's a small resistor inside of a chip that connects GPIO pin to high voltage that you can use instead of connecting external one.