git-rename-branch
Rename a Git branch
TLDR
Rename the branch you are currently on
Rename a specific branch
SYNOPSIS
git rename-branch [-f | --force] [
PARAMETERS
The current name of the branch you wish to rename. If omitted, the command renames the currently checked-out branch (HEAD).
The desired new name for the branch.
-f, --force
If the new-branch name already exists locally, this option forces the rename by deleting the existing branch and then performing the rename. This is equivalent to using git branch -M for the local rename part.
--local-only
If provided, the command will only rename the branch locally and will not attempt to update or delete branches on the remote repository. This bypasses any remote push or delete operations typically associated with a full rename workflow.
DESCRIPTION
The command git-rename-branch is not a native Git subcommand but represents a common operation or a user-created alias/script to streamline the process of renaming a Git branch.
Typically, renaming a Git branch involves several manual steps:
1. Renaming the local branch using git branch -m
2. Pushing the newly named branch to the remote repository (e.g., git push origin
3. (Optional but recommended) Deleting the old branch name from the remote repository (e.g., git push origin --delete
4. (Optional) Resetting the upstream tracking for the new branch (e.g., git push origin -u
A hypothetical or user-defined git-rename-branch command aims to encapsulate these steps into a single, convenient execution, handling both local and remote aspects of the rename operation. Its primary purpose is to simplify workflow and reduce the chance of manual errors.
CAVEATS
The command git-rename-branch is not a standard, built-in Git command. It commonly refers to a user-defined alias, a custom shell script, or a conceptual wrapper over the fundamental Git commands (git branch -m, git push).
Its exact behavior (e.g., whether it handles remote operations, force options, etc.) depends entirely on how it's implemented by the user or system administrator.
Renaming a branch that others are actively working on requires coordination, as their tracking branches and local copies will become outdated. They will need to adjust their setup (e.g., git branch --unset-upstream on old local branch, git branch -m
MANUAL WORKFLOW FOR RENAMING A BRANCH
If a git-rename-branch command is not available or preferred, the branch can be renamed manually using the following steps:
1. Rename your local branch:
If you're on the branch you want to rename:
git branch -m
If you're on a different branch:
git branch -m
2. Push the new branch to remote:
git push origin -u
3. Delete the old branch from remote:
git push origin --delete
4. Inform collaborators (critical for shared branches):
Let other team members know about the branch rename so they can update their local repositories and tracking branches accordingly. They might need to fetch, then delete their local old branch, and checkout/track the new one.
CREATING A CUSTOM ALIAS FOR RENAMING
Users can create a Git alias to achieve similar functionality to a dedicated git-rename-branch command. For example, to rename a local branch and update its upstream:
git config --global alias.rename-branch '!f() { git branch -m "$1" "$2" && git push origin -u "$2" && git push origin --delete "$1"; }; f'
This alias would then be invoked as git rename-branch
HISTORY
The need for a streamlined branch renaming process emerged as Git users frequently encountered the multi-step nature of renaming branches, especially when remote repositories were involved. While git branch -m handles the local aspect, updating the remote requires additional git push commands. This led to many users creating personal aliases or simple shell scripts (often named 'git-rename-branch', 'git-mv-branch', or 'git-move-branch') to automate these repetitive steps, improving efficiency and reducing potential errors during a rename operation. The concept of git-rename-branch thus evolved out of practical user demand rather than being a core Git development.
SEE ALSO
git-branch(1), git-push(1), git-checkout(1), git-remote(7)