Minimum components for BJT (edit: or FET) H-Bridge applied to a small 3-6V motor controlled by Arduino
This circuit allows you to do forward, reverse, and brake-stop (short motor out).

C1 may be required to keep flyback pulses safe for the transistors.

It cannot do PWM motor control, and you can't turn all the transistors off while the motor is running. Both of those require the flyback diodes. 

For a small reversing motor it is the simplest circuit.







simulate this circuit &ndash; Schematic created using CircuitLab

For PWM you have to add the diodes. 

Because any drop across the MCU's output fets supplying base current is a direct loss of motor voltage, you want transistors with the best HFE at the motor current, and an MCU with good output drive. Ganging up multiple port pins can improve the drive.

The problem with simple bipolar motor drives where port pins directly drive a single transistor, is that in traditional bipolars the HFE drops off as the current increases, at the same time as the port pin vrop is increasing. So it works well at low currents, but quite abruptly hits a current where it doesn't really work any more. 

There are modern bipolars that have much higher reliable gains, and push this workable range up -  especially for the high side transistors where the port pins often have significantly weaker pull up drive than pull down drive.

Also note that older bipolars BC547,BC337 have high gain grades BC547C, BC337-40 which you should be using for this.