History rewriting
These operations rewrite commits; avoid using on published history unless you intend to force-push.
change_commit_message
Repo.change_commit_message(commit_id: str, new_message: str) -> RewriteResult
Amend the HEAD commit message. commit_id must resolve to HEAD.
reword
Repo.reword(commit_id: str, new_message: str) -> RewriteResult
Reword an arbitrary commit on the current branch (linear history only). Traverses the first-parent chain from HEAD to the target, rewrites that commit’s message, and replays the rest.
squash_last
Repo.squash_last(count: int, mode: str = "squash", message: str | None = None) -> RewriteResult
Squash the most recent commits into one. mode="squash" concatenates messages; mode="fixup" keeps only the oldest message. Linear history only.
rebase_branch
Repo.rebase_branch(branch: str, onto: str) -> RewriteResult
Replay a local branch onto a new base (pick-only). Conflicts abort the rebase.
filter_commits
Repo.filter_commits(author: str | None = None, message_contains: str | None = None) -> RewriteResult
Drop commits whose author matches (case-insensitive) or whose message contains the substring. Linear history only.
remove_path
Repo.remove_path(path_pattern: str) -> RewriteResult
Purge a path (glob pattern) from all commits reachable from HEAD. Linear history only.
keep_path
Repo.keep_path(glob_pattern: str) -> RewriteResult
Keep only paths matching the glob across history; everything else is dropped from rewritten commits. Linear history only.