There is no functional difference apart from the generated markup and the appearance. The<h:commandButton>
generates a HTML <input type="submit">
element and the<h:commandLink>
generates a HTML <a>
element which uses JavaScript to submit the form. Both are to be used to submit a form. Additional styling is irrelevant to the functionality.
Use the <h:commandButton>
if you need a submitbutton and use the <h:commandLink>
if you need a submitlink. If that doesn't make sense to you, then I don't know. If you can't decide which one to use, just choose the one which makes the most sense in UI perspective. Ask the web designer if you're unsure.