# Branches

## References

- v4 API:
  - `gitlab.v4.objects.ProjectBranch`
  - `gitlab.v4.objects.ProjectBranchManager`
  - `gitlab.v4.objects.Project.branches`
- v3 API:
  - `gitlab.v3.objects.ProjectBranch`
  - `gitlab.v3.objects.ProjectBranchManager`
  - `gitlab.v3.objects.Project.branches`
- GitLab API: https://docs.gitlab.com/ce/api/branches.html

## Examples

Get the list of branches for a repository:

    branches = project.branches.list()

Get a single repository branch:

    branch = project.branches.get('master')

Create a repository branch:

    # v4
    branch = project.branches.create({'branch': 'feature1',
                                      'ref': 'master'})

    #v3
    branch = project.branches.create({'branch_name': 'feature1',
                                      'ref': 'master'})

Delete a repository branch:

    project.branches.delete('feature1')
    # or
    branch.delete()

Protect/unprotect a repository branch:

    branch.protect()
    branch.unprotect()

Note

By default, developers are not authorized to push or merge into protected branches. This can be changed by passing `developers_can_push` or `developers_can_merge`:

    branch.protect(developers_can_push=True, developers_can_merge=True)