- Branch
- Commits
- Pull request
- Merge
With merging, there are additional options: "Squash" means you take all the commits and squash them into a single commit instead of a bunch of little ones to simplify the history. "Rebase" is something you do if the master has changed since the branch started and you want your diff to be against the new master instead of the old one. Rebasing is also something you can (and possibly should) do before you make the pull request when the master has changed since the branch was made.