Skip to main content

Reference Renaming Options

Options for renaming Git references including branches and tags.

Tag Renaming

—tag-rename

--tag-rename
string
Rename tags by replacing prefix.Format: OLD:NEWApplies to: Tag names only (use --refname-callback for branches)Empty values: Either OLD or NEW can be emptyHow it works:
  • Matches tags starting with OLD prefix
  • Replaces the OLD prefix with NEW prefix
  • Rest of tag name remains unchanged
Basic examples:
# Rename tag prefix
git filter-repo --tag-rename v:version-
# v1.0.0 -> version-1.0.0
# v2.1.3 -> version-2.1.3

# Remove tag prefix
git filter-repo --tag-rename release-:
# release-1.0 -> 1.0
# release-2.0 -> 2.0

# Add tag prefix
git filter-repo --tag-rename :prod-
# 1.0.0 -> prod-1.0.0
# 2.0.0 -> prod-2.0.0

# Change tag prefix
git filter-repo --tag-rename foo:bar
# foo-1.2.3 -> bar-1.2.3
# foo-alpha -> bar-alpha

Common Use Cases

Preparing for Repository Merge

When merging repositories, avoid tag name conflicts:
# Prefix all tags with project name
git filter-repo --tag-rename :myproject-

# Before: v1.0.0, v2.0.0
# After:  myproject-v1.0.0, myproject-v2.0.0

Standardizing Tag Format

# Change from hyphen to slash
git filter-repo --tag-rename release-:release/

# Before: release-1.0, release-2.0
# After:  release/1.0, release/2.0

Removing Tag Prefix

# Remove "v" prefix from version tags
git filter-repo --tag-rename v:

# Before: v1.0.0, v2.1.0
# After:  1.0.0, 2.1.0

Adding Organization Prefix

# Add organization name
git filter-repo --tag-rename :acme-corp-

# Before: 1.0, 2.0
# After:  acme-corp-1.0, acme-corp-2.0

Advanced Tag Renaming

Multiple Tag Rename Rules

Apply multiple renames sequentially:
# Not supported - only one --tag-rename allowed
# Use --refname-callback instead for complex logic

Pattern-Based Tag Renaming

For complex tag renaming, use --refname-callback:
git filter-repo --refname-callback '
  if refname.startswith(b"refs/tags/v"):
    # v1.0 -> version-1.0
    return b"refs/tags/version-" + refname[11:]
  return refname
'
Learn more about callbacks →

Branch Renaming

--tag-rename only affects tags. To rename branches, use --refname-callback.

Rename Branches with Callback

git filter-repo --refname-callback '
  if refname.startswith(b"refs/heads/feature/"):
    # feature/xyz -> feat/xyz
    return b"refs/heads/feat/" + refname[18:]
  return refname
'

Reference Format

Git references use the following format:
  • Tags: refs/tags/tagname
  • Branches: refs/heads/branchname
  • Remote branches: refs/remotes/origin/branchname

Tag Rename Behavior

--tag-rename automatically handles the refs/tags/ prefix:
# This:
git filter-repo --tag-rename foo:bar

# Internally works with:
refs/tags/foo-1.0 -> refs/tags/bar-1.0

Interaction with —partial

With --partial flag, behavior changes:
# Normal: Replaces refs
git filter-repo --tag-rename old:new
# Result: refs/tags/old-1.0 deleted, refs/tags/new-1.0 created

# With --partial: Creates new refs, keeps old
git filter-repo --partial --tag-rename old:new
# Result: refs/tags/old-1.0 kept, refs/tags/new-1.0 also created
--partial creates duplicate refs, which can be confusing. Use with caution.

Usage Examples

Prepare for Monorepo Merge

# Add project prefix to all tags
git filter-repo --tag-rename :projectA-

# In another repo
cd ../projectB
git filter-repo --tag-rename :projectB-

# Now merge both into monorepo
# No tag conflicts!

Convert Tag Convention

# Convert from release/x.y.z to vx.y.z
git filter-repo --tag-rename release/:v

# Before: release/1.0.0, release/2.0.0  
# After:  v1.0.0, v2.0.0

Namespace Tags by Environment

# Prefix production tags
git filter-repo --tag-rename :prod/

# Before: v1.0, v2.0
# After:  prod/v1.0, prod/v2.0

Verification

Verify tag renames:
# Before filtering
git tag -l

# After filtering
git tag -l

# Check specific tag
git show-ref --tags

# View tag details
git show new-tag-name

Important Notes

Lightweight vs Annotated TagsTag renaming works for both lightweight and annotated tags. The tag message and metadata are preserved for annotated tags.
One Rename Rule OnlyOnly one --tag-rename option is supported. For multiple or complex renaming rules, use --refname-callback.
Testing RenamesTest tag renaming with --dry-run:
git filter-repo --tag-rename foo:bar --dry-run
grep 'refs/tags' .git/filter-repo/fast-export.filtered

Tag Rename Safety

Tag renaming is permanent and affects all tag references:
  • Old tag names are removed
  • New tag names point to the same commits (rewritten)
  • Annotated tag messages are preserved
  • Tag signatures are removed (history rewrite invalidates signatures)

Limitations

No Wildcard Support

--tag-rename doesn’t support wildcards:
# Not supported
git filter-repo --tag-rename 'v*':'version-*'
Use --refname-callback for pattern matching.

Prefix Matching Only

Only prefix replacement is supported:
# Works - prefix match
git filter-repo --tag-rename release:prod
# release-1.0 -> prod-1.0

# Doesn't work - suffix replacement not supported
# For this, use --refname-callback

Single Rename Rule

Multiple --tag-rename options not supported:
# Only last one takes effect
git filter-repo --tag-rename foo:bar --tag-rename baz:qux

See Also

Build docs developers (and LLMs) love