A branch is an independent line of development in a project.
When you create a branch (in your terminal or with the web interface), you are creating a snapshot of a certain branch, usually the main branch, at its current state. From there, you can start to make your own changes without affecting the main codebase. The history of your changes is tracked in your branch.
When your changes are ready, you then merge them into the rest of the codebase with a merge request.