s-blog

本地 Git 常用命令速记(镜像 / 历史核对篇)

ssssmy · 2026-06-10 · 2 min · Git

本地 Git 常用命令速记(镜像 / 历史核对篇)

整理一次仓库迁移中高频用到的本地 Git 命令,偏"镜像 + 历史核对"场景,留作速记。

1. 克隆

# 裸镜像:只要 Git 数据库,不要工作区(省时省空间,适合做中转/镜像)
git clone --bare <url> repo.git

# 只取某个 tag/分支可达的历史(浅化范围,但仍是完整历史)
git clone --bare --single-branch --branch <tag|branch> <url> repo.git

# 从已有裸仓库检出一份可浏览的工作副本
git clone repo.git work-dir

--bare 仓库里看不到源码文件是正常的——代码压缩在 objects/pack/*.pack,不会摊开成文件。

2. 增量抓取

# 只抓某个 tag,写到本地同名 tag(只传增量对象,不重下整库)
git fetch <url> refs/tags/<tag>:refs/tags/<tag>

# 抓某个分支
git fetch <url> <branch>:<branch>

3. 按引用精确推送

# 把某个 commit 推成一个新分支(不依赖本地 HEAD)
git push <url> <sha>:refs/heads/<branch>

# 推送单个 tag
git push <url> refs/tags/<tag>

# 删除远端分支
git push <url> --delete <branch>

想保留完整历史又不污染默认分支时,推到一个新分支最稳妥;避免 --mirror / --all 这类会动既有分支的批量操作。

4. 历史与对象核对

git rev-list --count <ref>          # 提交总数(迁移后用它和远端核对)
git rev-parse "<tag>^{commit}"      # 把 tag 剥到它指向的 commit
git log -1 --format='%H %s' <ref>   # 看某引用最新一条提交的 hash + 标题
git show-ref                        # 列出所有 ref(分支/tag)
git ls-tree --name-only <ref>       # 列出某引用根目录下的文件(验证代码确实在库里)

5. 临时探测仓库

git init probe && cd probe
echo x > a.txt
git add . && git commit -m "probe"

需要快速验证一个推送/钩子行为时,临时建个小仓库最方便,用完删掉即可。


配套长文见同分类《把 GitHub 大型仓库完整迁移到内网 GitLab》。

原文链接:https://www.ssssmy.com/notes/ben-di-git-chang-yong-ming-ling-su-ji-jing-xiang-li-shi-he-dui-pian