Git仓库:能否在首次提交前创建分支且保留master分支?
当然可以!而且完全不会影响原master分支
你想要的提交结构完全能实现,而且全程不会改动master分支的任何提交历史,这正是Git分支设计的灵活之处。下面是具体的操作步骤:
第一步:创建独立的v1.0提交分支
首先我们要搭建一个和master完全隔离的分支,用来存放v1.0的代码提交:
- 创建一个孤儿分支(孤儿分支没有任何父提交,是完全空白的分支起点):
git checkout --orphan v1.0-branch - 因为孤儿分支会默认带上当前master的文件,所以先清空工作区和暂存区:
git rm -rf . - 把v1.0的所有代码复制到当前目录,然后提交v1.0的初始版本:
git add . git commit -m "v1.0 初始提交" - 如果v1.0还有后续的迭代提交(比如bug修复、小版本更新),直接在这个分支上正常提交即可,最终会形成完整的v1.0提交链:
v1.0 - o - o - ...
第二步:构建分叉结构(不改动原master)
如果想要实现“v1.0链分叉出v2.0链”的结构,我们可以在新分支上完成这个组合,完全不碰原master:
- 先切换到v1.0分支的最后一个提交:
git checkout v1.0-branch - 创建一个新分支用来承载分叉后的v2.0链,比如命名为
v2-from-v1:git checkout -b v2-from-v1 - 找到原master分支的第一个提交(也就是v2.0的初始提交)的哈希值,用这个命令可以查看:
假设这个初始提交的哈希是git log --oneline --reverse masterabc123。 - 把原master的v2.0初始提交内容复制到当前分支(不自动提交,方便自定义提交信息):
git cherry-pick -n abc123 - 提交这个v2.0的初始版本,备注清楚是从v1.0分叉而来:
git commit -m "v2.0 初始提交(从v1.0分叉)" - 最后把原master分支后续的所有提交,迁移到这个新的v2.0提交后面:
- 先给原master创建一个副本分支(避免改动原master):
git checkout master git checkout -b temp-master - 执行rebase操作,把原master中
abc123之后的所有提交,移到v2-from-v1的v2.0提交后面:git rebase --onto v2-from-v1 abc123 temp-master
- 先给原master创建一个副本分支(避免改动原master):
完成后,temp-master分支就会呈现你想要的结构:v1.0 - o - o - ... → v2.0 - o - o - ...,而原master分支的提交历史和代码状态完全和之前一样,没有任何变化。
补充说明
如果你的需求只是“有一个包含v1.0代码的分支”,不需要和v2.0有分叉关联,那只需要完成第一步即可——这个v1.0分支会和master分支形成两个独立的提交链,互相不会干扰。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

