An open-collector (or open-drain) output is able to pull down to 0V when the output state is logic 0 (low), but does not pull up to the positive supply rail when the output state is logic 1 (high). In the logic 1 state, it simply goes "open", i.e floating.
If you connect a "pullup" resistor from an open-collector or open-drain output to a positive supply rail, when the output goes open, the resistor will pull the output voltage up to the positive rail. Some open-collector and open-drain outputs can be pulled up to a higher voltage than the operating voltage of the device, but some should only be pulled up to the device's supply rail (VCC or VDD, usually), or a lower voltage.
Generally, in logic applications, open-collector and open-drain outputs are "active-low". This means that when they are low, the state or signal that they represent is in the active state. For example, a lot of 74xxx ICs, as well as memory devices and other digital components, have active low enable inputs. The device doesn't do anything until a low state is asserted on its enable input.
Open-collector and open-drain outputs can be "OR-tied". This means that several outputs can be connected together, usually with a single pullup resistor, and they won't fight with each other, the way push-pull outputs do. If one or more of the open-collector or open-drain outputs pulls low, they are all pulled low, and the resulting signal is low. If none of the outputs are low, the pullup resistor pulls them all high. This gives an active low OR gating effect - the resulting signal is low if the first output is low, OR the second output is low, OR the third output is low, and so on. Only if none of the outputs are pulling low will the resulting signal be high.
Open-collector and open-drain outputs can also be used for level translation. That is, you can pass a signal from one part of a circuit that uses, say, a 12V supply, to another part of the circuit that uses, say, a 5V supply, using an open-collector or open-drain output with a pullup resistor to the 5V supply. Ditto for converting from 5V to 3.3V or a lower voltage.
Open-collector outputs are not normally used for very fast signals, because stray capacitance and input capacitance in the circuit causes the rising edge to be slowed down, because the pullup resistor does not pull up very strongly, so it forms an R-C circuit with that capacitance which delays the rising edge. This can be improved by using a lower pullup resistance, but this then causes higher power consumption when the output is low.
Push-pull outputs pull both high and low, according to the output state they are asserting. If the output is driving a low (logic 0) state, it pulls down to 0V, like an open-collector or open-drain output. But unlike an open-collector or open-drain output, when it is asserting a high (logic 1) state, it also pulls its output up to the positive supply rail (usually VCC or VDD). In other words, it both "pushes" and "pulls".
Push-pull outputs are common in logic circuits. You can assume that an output from an IC is push-pull unless it is specifically flagged as being open-collector or open-drain, or tri-state (which is another different type).
The difference between open-collector and open-drain is just the type of transistor that is driving the output. If it's a BJT (bipolar junction transistor), normally an NPN with its emitter grounded and its collector connected to the output pin, then it's an open-collector output. If it's a MOSFET (metal oxide semiconductor field effect transistor), normally an N-channel with its source grounded and its drain connected to the output pin, it's an open-drain output.