About Git Bundle

git bundle 可以把仓库的提交打包成单个文件,在无法直连远程仓库时(如离线、内网隔离),通过拷贝文件的方式向另一台电脑同步代码。下面记录增量包的创建、合并方法与一个必须注意的核心原则。

创建增量包

# 打包 master 分支上最近 5 个 commit
# HEAD~5..HEAD 表示从当前提交的前第5个提交到当前提交的范围
git bundle create recent-commits.bundle HEAD~5..HEAD
  
# 打包从 a1b2c3d 之后到当前 HEAD 的所有 commit
git bundle create incremental.bundle a1b2c3d..HEAD

合并增量包

# 方法A:直接 Pull(最简单,会自动合并到当前分支)
git pull /path/to/incremental.bundle master

# 方法B:先 Fetch 到一个临时分支,检查无误后再合并
# 将 bundle 中的 master 分支获取到本地的 bundle-master 分支
git fetch /path/to/incremental.bundle master:bundle-master
  
# 检查差异
git log bundle-master
  
# 确认后合并
git merge bundle-master

核心原则:增量包必须“完整”

打包的 commit 范围,必须包含目标电脑所缺失的全部提交,可以多不能少。

例如,目标电脑已提交到 C4,你当前在 C6。
如果你只打包 C6 (HEAD~..HEAD),拉取时会因缺少 C5 而报错。
至少要打包 C4..C6 的范围才行。
当然你打包更多比如 C1..C6 也没问题,只是有点冗余而已。

所有关键不是从 C4 开始,而是起点必须是对方已有的提交。

posted @ 2026-11-03 10:14  蛮哥哥  阅读(7)  评论(0)    收藏  举报