module documentation

Git rebase implementation.

Class DiskRebaseStateManager Manages rebase state on disk using same files as C Git.
Class MemoryRebaseStateManager Manages rebase state in memory for MemoryRepo.
Class Rebaser Handles git rebase operations.
Class RebaseState Type definition for rebase state.
Class RebaseStateManager Protocol for managing rebase state.
Class RebaseTodo Manages the git-rebase-todo file for interactive rebase.
Class RebaseTodoCommand Enum for rebase todo commands.
Class RebaseTodoEntry Represents a single entry in a rebase todo list.
Exception RebaseAbort Raised when rebase is aborted.
Exception RebaseConflict Raised when a rebase conflict occurs.
Exception RebaseError Base class for rebase errors.
Function edit_todo Edit the todo list of an in-progress interactive rebase.
Function process_interactive_rebase Process an interactive rebase.
Function rebase Perform a git rebase operation.
Function start_interactive Start an interactive rebase.
Function _squash_commits Helper to squash/fixup commits.
def edit_todo(repo: Repo, editor_callback: Callable[[bytes], bytes]) -> RebaseTodo:

Edit the todo list of an in-progress interactive rebase.

Parameters
repo:RepoRepository with in-progress rebase
editor_callback:Callable[[bytes], bytes]Callback to edit todo content. Takes bytes, returns bytes.
Returns
RebaseTodoUpdated RebaseTodo object
Raises
RebaseErrorIf no rebase is in progress or todo cannot be loaded
def process_interactive_rebase(repo: Repo, todo: RebaseTodo | None = None, editor_callback: Callable[[bytes], bytes] | None = None) -> tuple[bool, str | None]:

Process an interactive rebase.

This function executes the commands in the todo list sequentially.

Parameters
repo:RepoRepository to rebase in
todo:RebaseTodo | NoneRebaseTodo object (if None, loads from state)
editor_callback:Callable[[bytes], bytes] | NoneOptional callback for reword operations
Returns
tuple of (is_complete, pause_reason)
  • is_complete: True if rebase is complete, False if paused
  • pause_reason: Reason for pause (e.g., "edit", "conflict", "break") or None
Raises
RebaseErrorIf rebase fails
def rebase(repo: Repo, upstream: bytes, onto: bytes | None = None, branch: bytes | None = None) -> list[bytes]:

Perform a git rebase operation.

Parameters
repo:RepoRepository to rebase in
upstream:bytesUpstream branch/commit to rebase onto
onto:bytes | NoneSpecific commit to rebase onto (defaults to upstream)
branch:bytes | NoneBranch to rebase (defaults to current branch)
Returns
list[bytes]List of new commit SHAs created by rebase
Raises
RebaseConflictIf conflicts occur during rebase
RebaseErrorFor other rebase errors
def start_interactive(repo: Repo, upstream: bytes, onto: bytes | None = None, branch: bytes | None = None, editor_callback: Callable[[bytes], bytes] | None = None) -> RebaseTodo:

Start an interactive rebase.

This function generates a todo list and optionally opens an editor for the user to modify it before starting the rebase.

Parameters
repo:RepoRepository to rebase in
upstream:bytesUpstream branch/commit to rebase onto
onto:bytes | NoneSpecific commit to rebase onto (defaults to upstream)
branch:bytes | NoneBranch to rebase (defaults to current branch)
editor_callback:Callable[[bytes], bytes] | NoneOptional callback to edit todo content. If None, no editing. Should take bytes and return bytes.
Returns
RebaseTodoRebaseTodo object with the (possibly edited) todo list
Raises
RebaseErrorIf rebase cannot be started
def _squash_commits(repo: Repo, rebaser: Rebaser, entry: RebaseTodoEntry, keep_message: bool, editor_callback: Callable[[bytes], bytes] | None = None) -> str | None:

Helper to squash/fixup commits.

Parameters
repo:RepoRepository
rebaser:RebaserRebaser instance
entry:RebaseTodoEntryTodo entry for the commit to squash
keep_message:boolWhether to keep this commit's message (squash) or discard (fixup)
editor_callback:Callable[[bytes], bytes] | NoneOptional callback to edit combined message (for squash)
Returns
str | NoneNone on success, "conflict" on conflict