branch¶

For git-branch(1).

Overview¶

Manage git branches using GitBranchManager (collection-level) and GitBranchCmd (per-branch operations).

Example¶

from libvcs.cmd.git import Git

git = Git(path='/path/to/repo')

# List all branches
branches = git.branches.ls()

# List remote branches only
remote_branches = git.branches.ls(remotes=True)

# Create a new branch
git.branches.create('feature-branch')

# Get a specific branch and operate on it
branch = git.branches.get(branch_name='feature-branch')
branch.rename('new-feature')
branch.delete()

API Reference¶

class libvcs.cmd.git.GitBranchManager(*, path, cmd=None)[source]¶

Bases: object

Traverse and manage git branches with ORM-like filtering via QueryList.

Wrap some of git-branch(1), git-checkout(1), manager.

Parameters:
  • path (str | PathLike[str]) – Operates as PATH in the corresponding git subcommand.

  • cmd (Git | None)

Examples

>>> GitBranchManager(path=tmp_path)
<GitBranchManager path=...>
>>> GitBranchManager(path=tmp_path).run(quiet=True)
'fatal: not a git repository (or any of the parent directories): .git'
>>> GitBranchManager(
...     path=example_git_repo.path).run(quiet=True)
'* master'
branch_name: str¶
__init__(*, path, cmd=None)[source]¶

Wrap some of git-branch(1), git-checkout(1), manager.

Parameters:
  • path (str | PathLike[str]) – Operates as PATH in the corresponding git subcommand.

  • cmd (Git | None)

Return type:

None

Examples

>>> GitBranchManager(path=tmp_path)
<GitBranchManager path=...>
>>> GitBranchManager(path=tmp_path).run(quiet=True)
'fatal: not a git repository (or any of the parent directories): .git'
>>> GitBranchManager(
...     path=example_git_repo.path).run(quiet=True)
'* master'
path: Path¶

Directory to check out

run(local_flags=None, *, quiet=None, log_in_real_time=False, check_returncode=None, **kwargs)[source]¶

Run a command against a git repository’s branches.

Wraps git branch.

Return type:

str

Parameters:
  • local_flags (list[str] | None)

  • quiet (bool | None)

  • log_in_real_time (bool)

  • check_returncode (bool | None)

  • kwargs (Any)

Examples

>>> GitBranchManager(path=example_git_repo.path).run()
'* master'
checkout(*, branch)[source]¶

Git branch checkout.

Return type:

str

Parameters:

branch (str)

Examples

>>> GitBranchManager(path=example_git_repo.path).checkout(branch='master')
"Your branch is up to date with 'origin/master'."
create(*, branch, checkout=False)[source]¶

Create a git branch.

Parameters:
  • branch (str) – Name of the branch to create.

  • checkout (bool) – If True, also checkout the newly created branch. Defaults to False (create only, don’t switch HEAD).

Return type:

str

Examples

>>> GitBranchManager(path=example_git_repo.path).create(branch='master')
"fatal: a branch named 'master' already exists"
_ls(*, local_flags=None)[source]¶

List branches (raw output).

Parameters:

local_flags (list[str] | None) – Additional flags to pass to git branch.

Return type:

list[str]

Examples

>>> branches = GitBranchManager(path=example_git_repo.path)._ls()
>>> '* master' in branches or 'master' in str(branches)
True
ls(*, _all=False, remotes=False, merged=None, no_merged=None, contains=None, sort=None, verbose=False)[source]¶

List branches.

Parameters:
  • _all (bool) – List all branches (local + remote). Maps to –all.

  • remotes (bool) – List remote branches only. Maps to –remotes.

  • merged (str | None) – Only list branches merged into specified commit.

  • no_merged (str | None) – Only list branches NOT merged into specified commit.

  • contains (str | None) – Only list branches containing specified commit.

  • sort (str | None) – Sort key (e.g., ‘-committerdate’, ‘refname’).

  • verbose (bool) – Show sha1 and commit subject line for each head. Maps to –verbose.

Return type:

QueryList[GitBranchCmd]

Examples

>>> branches = GitBranchManager(path=example_git_repo.path).ls()
>>> any(b.branch_name == 'master' for b in branches)
True
get(*args, **kwargs)[source]¶

Get branch via filter lookup.

Return type:

GitBranchCmd | None

Parameters:

Examples

>>> GitBranchManager(
...     path=example_git_repo.path
... ).get(branch_name='master')
<GitBranchCmd path=... branch_name=master>
>>> GitBranchManager(
...     path=example_git_repo.path
... ).get(branch_name='unknown')
Traceback (most recent call last):
    exec(compile(example.source, filename, "single",
    ...
    return self.ls().get(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "..._internal/query_list.py", line ..., in get
    raise ObjectDoesNotExist
libvcs._internal.query_list.ObjectDoesNotExist
filter(*args, **kwargs)[source]¶

Get branches via filter lookup.

Return type:

list[GitBranchCmd]

Parameters:

Examples

>>> GitBranchManager(
...     path=example_git_repo.path
... ).filter(branch_name__contains='master')
[<GitBranchCmd path=... branch_name=master>]
>>> GitBranchManager(
...     path=example_git_repo.path
... ).filter(branch_name__contains='unknown')
[]
class libvcs.cmd.git.GitBranchCmd(*, path, branch_name, cmd=None)[source]¶

Bases: object

Run git commands targeting a specific branch.

Lite, typed, pythonic wrapper for git-branch(1).

Parameters:
  • path (str | PathLike[str]) – Operates as PATH in the corresponding git subcommand.

  • branch_name (str) – Name of branch.

  • cmd (Git | None)

Examples

>>> GitBranchCmd(
...     path=tmp_path,
...     branch_name='master'
... )
<GitBranchCmd path=... branch_name=master>
>>> GitBranchCmd(
...     path=tmp_path,
...     branch_name='master'
... ).run(quiet=True)
'fatal: not a git repository (or any of the parent directories): .git'
>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).run(quiet=True)
'* master'
__init__(*, path, branch_name, cmd=None)[source]¶

Lite, typed, pythonic wrapper for git-branch(1).

Parameters:
  • path (str | PathLike[str]) – Operates as PATH in the corresponding git subcommand.

  • branch_name (str) – Name of branch.

  • cmd (Git | None)

Return type:

None

Examples

>>> GitBranchCmd(
...     path=tmp_path,
...     branch_name='master'
... )
<GitBranchCmd path=... branch_name=master>
>>> GitBranchCmd(
...     path=tmp_path,
...     branch_name='master'
... ).run(quiet=True)
'fatal: not a git repository (or any of the parent directories): .git'
>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).run(quiet=True)
'* master'
path: Path¶

Directory to check out

branch_name: str¶
run(local_flags=None, *, quiet=None, log_in_real_time=False, check_returncode=None, **kwargs)[source]¶

Run a command against a git repository’s branch.

Wraps git branch.

Return type:

str

Parameters:
  • local_flags (list[str] | None)

  • quiet (bool | None)

  • log_in_real_time (bool)

  • check_returncode (bool | None)

  • kwargs (Any)

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).run()
'* master'
checkout()[source]¶

Git branch checkout.

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).checkout()
"Your branch is up to date with 'origin/master'."
create(*, checkout=False)[source]¶

Create a git branch.

Parameters:

checkout (bool) – If True, also checkout the newly created branch. Defaults to False (create only, don’t switch HEAD).

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).create()
"fatal: a branch named 'master' already exists"
delete(*, force=False, log_in_real_time=False, check_returncode=None)[source]¶

Delete this git branch.

Parameters:
  • force (bool) – Use -D instead of -d to force deletion.

  • log_in_real_time (bool)

  • check_returncode (bool | None)

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='nonexistent'
... ).delete()
"error: branch 'nonexistent' not found"
rename(new_name, *, force=False, log_in_real_time=False, check_returncode=None)[source]¶

Rename this git branch.

Parameters:
  • new_name (str) – New name for the branch.

  • force (bool) – Use -M instead of -m to force rename.

  • log_in_real_time (bool)

  • check_returncode (bool | None)

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).rename('main')
''
copy(new_name, *, force=False, log_in_real_time=False, check_returncode=None)[source]¶

Copy this git branch.

Parameters:
  • new_name (str) – Name for the copied branch.

  • force (bool) – Use -C instead of -c to force copy.

  • log_in_real_time (bool)

  • check_returncode (bool | None)

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).copy('master-copy')
''
set_upstream(upstream, *, log_in_real_time=False, check_returncode=None)[source]¶

Set the upstream (tracking) branch.

Parameters:
  • upstream (str) – The upstream branch in format remote/branch (e.g., origin/main).

  • log_in_real_time (bool)

  • check_returncode (bool | None)

Return type:

str

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).set_upstream('origin/master')
"branch 'master' set up to track 'origin/master'."
unset_upstream(*, log_in_real_time=False, check_returncode=None)[source]¶

Remove the upstream (tracking) information.

Return type:

str

Parameters:
  • log_in_real_time (bool)

  • check_returncode (bool | None)

Examples

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='master'
... ).unset_upstream()
''
track(remote_branch, *, log_in_real_time=False, check_returncode=None)[source]¶

Create branch tracking a remote branch.

Wraps git branch -t.

Parameters:
  • remote_branch (str) – Remote branch to track (e.g., ‘origin/main’).

  • log_in_real_time (bool)

  • check_returncode (bool | None)

Return type:

str

Examples

For existing branches, use set_upstream() instead. track() is for creating new branches that track a remote:

>>> GitBranchCmd(
...     path=example_git_repo.path,
...     branch_name='tracking-branch'
... ).track('origin/master')
"branch 'tracking-branch' set up to track 'origin/master'."