重命名主分支并创建一个新的空主

Posted

技术标签:

【中文标题】重命名主分支并创建一个新的空主【英文标题】:Rename master-branch and create a new, empty master 【发布时间】:2021-12-06 22:15:54 【问题描述】:

我在现有存储库上使用了git subtree 命令,以便将子文件夹提取到它自己的存储库中。然后,我将提取的提交推送到它的新存储库,即master-branch

但是,我应该一直把它推到"feature/FT001"-branch 并想相应地改变一切:

    重命名分支:git branch -m feature/FT001 删除旧分支并推送新分支:git push origin master feature/FT001 重置上游分支:git push origin -u feature/FT001

在这种状态下,master 分支在本地和原点不再存在。

我现在想添加一个新的(空的)master-branch。看起来我以前从未在master 上工作过(没有提交)。历史应该看起来像有一个master 分支,然后我创建了feature-branch 并将所有内容提交给feature-branch(最终将我的feature-branch 合并到master-branch)。

我该如何完成这些最后的步骤?

【问题讨论】:

你不能:在 Git 中没有“空分支”这样的东西。分支名称是指向提交的指针。它必须有一个提交指向。 (换句话说,您必须先更改问题陈述要求,然后才能解决问题。) @torek:那我该怎么处理呢?我是否需要在一开始就在我的主分支上创建一个“初始提交”然后分支出来?之后是否仍然可以这样做,而不会过多地混淆历史? 那(初始提交,例如,只是一个自述文件)是一种方法,但使用您使用的工具无法做到这一点。一个更简单的方法是在重命名的分支中选择任何现有的提交并将该提交称为“master”。 (显而易见的选择是最新的提交。)也许更好,根本不用master 可能相关:How to create a new (and empty!) "root" branch? 【参考方案1】:

我想你的目标是让所有提取的提交看起来都只在 feature/FT001 分支中,而 master 分支只被初始化。

如果你有 Git 2.23,你可以通过创建一个孤立分支来做到这一点:

git switch --orphan master

这将暂存您的所有文件,因此您必须取消暂存它们并对该孤立分支进行空提交:

git reset
git commit --allow-empty -m "Initial commit"

如果您有 Git 2.28+,您可以在一个命令上执行 switchreset

git switch --discard-changes --orphan master
git commit --allow-empty -m "Initial commit"

【讨论】:

以上是关于重命名主分支并创建一个新的空主的主要内容,如果未能解决你的问题,请参考以下文章

Git 第七章 IDEA集成Git -- IDEA集成Git( 创建分支 & 重命名分支 & 切换分支 & 合并分支(不冲突 / (代码)冲突) )

Git:可以重命名master吗? [复制]

GitLab 重命名分支并重新开始另一个

GitLab重命名分支并从另一个重新开始

Git:重命名分支中的目录

在拉取请求时重命名分支