如何从父仓库创建仅单初始提交的子仓库,用rebase拉取上游更新无旧提交
操作步骤
第一步:初始化子仓库(仅保留单条初始提交)
找空文件夹执行以下操作:
- 克隆父仓库到本地,切换到子仓库创建时间点对应的父仓库提交(假设父仓库主分支为main):
git clone <父仓库URL> temp-repo cd temp-repo git checkout <子仓库创建时点对应的父仓库commit哈希>
- 删除原有.git目录,重新初始化生成单条初始提交:
rm -rf .git git init git add . git commit -m "feat: 初始提交(同步父仓库指定时点全量内容)" # 绑定子仓库远程地址并推送 git remote add origin <子仓库远程URL> git push -u origin main
- 给子仓库添加上游父仓库远程源:
git remote add upstream <父仓库URL> git fetch upstream
注意:务必把第一步用到的「子仓库创建时点对应的父仓库commit哈希」妥善留存,后续同步更新都要用到这个值。
第二步:后续同步父仓库新增提交
每次需要拉取父仓库更新时按以下步骤操作,只会拉取创建子仓库之后的新增提交,同时支持插入子仓库自有提交:
- 先保证本地工作区干净,暂存或提交你在子仓库的本地修改
- 拉取上游父仓库最新提交:
git fetch upstream
- 用rebase截取父仓库新增提交,拼接在子仓库当前分支之后:
git rebase --onto main <你留存的初始父仓库commit哈希> upstream/main
- 出现冲突就按提示解决冲突,执行
git rebase --continue完成操作即可。此时你查看子仓库提交历史,就能看到父仓库的新增提交都独立保留了记录,中间可以正常插入你自己的子仓库提交。 - 最后推送到子仓库远程即可,rebase后提交哈希会变化,需要加-f参数强制推送(多人协作的子仓库请提前同步队友避免覆盖他人提交):
git push origin main -f
内容的提问来源于stack exchange,提问作者JD Solanki
相关产品推荐
相关产品推荐

