info > GIT-PACK-REFS(1)

GIT-PACK-REFS(1) Git Manual GIT-PACK-REFS(1)

πŸ“› NAME

git-pack-refs - Pack heads and tags for efficient repository access

πŸš€ Quick Reference

Use CaseCommandDescription
Pack all refs (tags + branches)git pack-refs --allPacks everything; useful for initial compacting of a repo with many historical branches πŸ“š
Pack only tags & already packed refsgit pack-refsDefault behaviour; leaves active branches unpacked 🌿
Pack without removing loose refsgit pack-refs --no-pruneKeep loose copies under $GIT_DIR/refs after packing πŸ—‚οΈ

πŸ” SYNOPSIS

git pack-refs [--all] [--no-prune]

πŸ“– DESCRIPTION

Traditionally, tips of branches 🌿 and tags 🏷️ (collectively known as refs) were stored one file per ref in a subdirectory under $GIT_DIR/refs directory. While many branch tips tend to be updated often, most tags and some branch tips are never updated. When a repository has hundreds or thousands of tags, this one‑file‑per‑ref format both wastes storage πŸ’Ύ and hurts performance 🐒.

This command is used to solve the storage and performance problem by storing the refs in a single file, $GIT_DIR/packed-refs πŸ“¦. When a ref is missing from the traditional $GIT_DIR/refs directory hierarchy, it is looked up in this file and used if found πŸ”.

Subsequent updates to branches always create new files under $GIT_DIR/refs directory hierarchy 🌱.

A recommended practice to deal with a repository with too many refs is to pack its refs with --all once, and occasionally run git pack-refs. Tags are by definition stationary and are not expected to change. Branch heads will be packed with the initial pack-refs --all, but only the currently active branch heads will become unpacked, and the next pack-refs (without --all) will leave them unpacked πŸ”„.

βš™οΈ OPTIONS

πŸ“Œ --all

The command by default packs all tags 🏷️ and refs that are already packed, and leaves other refs alone. This is because branches 🌿 are expected to be actively developed and packing their tips does not help performance. This option causes branch tips to be packed as well. Useful for a repository with many branches of historical interests πŸ“š.

🚫 --no-prune

The command usually removes loose refs πŸ—‘οΈ under $GIT_DIR/refs hierarchy after packing them. This option tells it not to. πŸ›‘

πŸ› BUGS

Older documentation written before the packed-refs mechanism was introduced may still say things like .git/refs/heads/<branch> file exists when it means β€œbranch <branch> exists” πŸ“œ.

πŸ“¦ GIT

Part of the git(1) suite

Git 2.34.1 02/26/2026 GIT-PACK-REFS(1)

GIT-PACK-REFS(1)
πŸ“› NAME πŸš€ Quick Reference πŸ” SYNOPSIS πŸ“– DESCRIPTION βš™οΈ OPTIONS
πŸ“Œ --all 🚫 --no-prune
πŸ› BUGS πŸ“¦ GIT

Generated by phpman v4.9.25-25-g40dbf62 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-07-14 02:26 @216.73.217.58
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 Transitional!Valid CSS!
Enhanced by LLM: deepseek-v4-pro / taotoken.net / www.chedong.com - original format