本地 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