The HTTP get method is used to retrieve a representation of a resource. Let's take a look at my user using the GitHub API. Here we can see the HTTP get has returned us a set of headers with metadata about this particular resource as well as the actual message body containing a representation of that resource, in this case, in JSON format.
Much like get, the head HTTP method is used to retrieve a resource. Unlike get, the response will only include the HTTP headers containing the metadata about that resource and does not include the message body.
This can be very useful if we need to only look up some metadata about a resource such as whether we have the latest version based on the e-tag or the last modified date of a certain resource and we don't want to waste the bandwidth or time retrieving the actual resource body.
Both get and head are considered item potent methods which means that issuing multiple requests or just one request will have the exact same effect. I can issue several head requests of this resource, and there will be no changes made to the resource. The response will be the same.
Much like being item potent, both get and head are also considered safe methods. That means that a user agent such as a browser can feel free to resubmit these requests when a user clicks the back button without prompting them or warning them that there may be some changes made as a result of issuing those requests.
To summarize, both get and head will retrieve a resource. The main difference being get will also retrieve a representation of the resource in the body in addition to the header's return.