如何在Git的master分支中创建多个无父节点的初始提交?
实现方法
你可以通过两种方式创建多个无父节点的根提交,再合并到master分支即可达成需求:
方法一:使用git checkout --orphan创建孤儿分支(适合新手操作)
- 先初始化新的Git仓库,完成第一次master分支的初始提交
git init test-repo cd test-repo echo "init" > readme.md git add . git commit -m "根提交1" - 创建无父节点的孤儿分支,孤儿分支创建后暂存区会保留当前工作区内容,不需要的话可以手动清空
git checkout --orphan temp-branch git rm -rf . # 清空暂存区和工作区,避免继承之前的文件 - 在孤儿分支上提交内容,此时这个提交就是无父节点的新根提交
echo "新根提交内容" > new-file.md git add new-file.md git commit -m "根提交2" - 切回master分支,将这个孤儿分支的根提交合并到master,允许不相关历史合并
git checkout master git merge temp-branch --allow-unrelated-histories - 重复上述孤儿分支创建、提交、合并的操作,就能在master分支的提交历史里加入多个无父节点的根提交。如果不需要保留临时孤儿分支,合并完成后可以执行
git branch -D temp-branch删除。
方法二:使用Git底层命令git commit-tree直接生成根提交(更灵活)
如果你熟悉Git底层原理,可以直接通过commit-tree命令创建无父的提交对象,直接将提交绑定到master分支:
- 先准备好要提交的文件内容,添加到暂存区后获取树对象哈希
echo "根提交3内容" > third.md git add third.md git write-tree # 执行后会输出树对象的哈希值,记下来后面用 - 直接创建无父节点的提交,把上一步得到的树哈希替换到命令对应位置
git commit-tree 替换为上一步输出的树哈希 -m "根提交3" # 执行后会输出新的提交哈希,记下来 - 将master分支指向新生成的根提交和原有提交的合并结果:
git merge 上一步输出的提交哈希 --allow-unrelated-histories
操作完成后你可以执行git log --graph --oneline查看提交拓扑,就能看到多个无父节点的根提交都被合并到了master分支上。如果执行合并时报错,确认你的Git版本在2.9及以上,该版本才正式支持--allow-unrelated-histories参数处理不相关历史的合并。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

