Question: Does anyone know what the difference between the 3 main types of publishing in Sitecore are?

I have the option to do a republish, incremental publish and a smart publish

My understanding is that a republish will publish everything but I don't understand the incremental or smart options

Answer: 
Here's an overview of each of the publishing methods:

Republish
=========

This publish will simply fully publish out each item again, regardless of whether it has been published before or not. Therefore this is the slowest publish as Sitecore will still transfer over changes that may already be on the target database.

Smart
=====

With this method, Sitecore will look at each item and compare it to the item in the target database (if it exists). If it determines that it needs to be updated, then it publishes the item, otherwise it skips it. I'm not actually sure what method it uses to determine if it needs to be updated, but my guess would be that it uses the `Revision` field which is a GUID that is updated each time an item is updated. If the GUIDs match, it would know that it doesn't need to update the item. Of course, if the item isn't there at all, it will be published.

Incremental
===========

Every time an update is made to an item, Sitecore tracks this change inside the `PublishQueue` table in the database. This is effectively Sitecore recording the fact that this item has changed, and therefore will need to be published. When you do an Incremental publish, this table is simply read to get the list of items that need to be published out. After the publish, this table is cleared.

Incremental is the fastest method of publishing as Sitecore is only publishing out what has changed. However it is also prone to error, for example if the `PublishQueue` table has been cleared before those items have been published, then an incremental publish won't publish those items.
* Incremental Publish : publishes only items that are in the publishing queue. Every time you change an item, the item is automatically added to the publishing queue. If the changed item is part of a workflow, the item is added to the publishing queue when it reaches the final workflow state.
Incremental Publish is the fastest way of publishing because Sitecore does not use resources to compare versions of the items that are in the publishing queue before publishing them.
* Smart Publish : publishes all items that have changed since the last publication. When you run a Smart publish, every item in the Master database is compared with the equivalent item in the target database and, if an item has changed, it is published
Comparing all items in the database makes this a time-consuming way of publishing your entire website, particularly if the content tree contains many items.
* Republish : publishes everything. Republish overwrites every item in the target database with the equivalent item from the Master database, even if it has not changed. In this way, republishing removes all obsolete versions from the target database. You can use republishing to bring a new web database online, to restore a backup of the master database, and to add a new content language, a new publishing target, or other system items to the website.

More info (screenshots) here: <https://doc.sitecore.net/sitecore_experience_platform/80/content_authoring/publishing/publish_a_website>