A fork is a copy of a repository that is owned by the person who forked it and exists independently of the main repository.
A clone creates a local copy of a repository that can exist on a computer and can sync with the shared repository. This is typically only done once per person and enables the person to make local changes then push these changes to the shared repository.
A branch is a section of code within a repository where changes can be made and fixes can be tested without changing the working section of the repository. Branches allow for different versions of the project to exist and be worked on simultaneously.