58

我想完全清空 Git 中的 master 分支。现在,我还想保留从 master 分支的所有其他分支。

这可能吗?如何?

4

6 回答 6

70

这实际上称为“删除旧的主分支并从头开始创建新的”

这将创建一个指向初始提交的新主分支:

git branch -D master
git checkout -b master <initial commit hash>

这将创建一个全新的主分支,与您所拥有的无关:

git branch -D master
git checkout --orphan master
git rm -rf *

但实际上您可以简单地将当前存储库保存到其他地方并创建一个新存储库。

于 2013-03-16T20:58:11.010 回答
46

创建孤儿分支

首先,您需要移动或删除当前的 master 分支。就个人而言,我更喜欢将它移到一边而不是删除它。之后,您只需使用该--orphan标志创建一个没有父级的新分支。例如:

git branch -m master old_master
git checkout --orphan master

由于当前分支现在没有历史记录,因此某些命令可能会失败并出现错误,例如fatal: bad default revision 'HEAD'直到您在新的主分支上首次提交之后。这是正常的,与您在新初始化的存储库中看到的行为相同。

于 2013-03-16T21:18:41.680 回答
8

其他答案建议创建一个新的主分支(就像在空存储库中一样)。但是没有历史的大师不是一个好习惯。这使得使用 rebase 变得很困难,因为你永远不能 rebase 第一次提交。任何存储库上 master 的第一次提交都应该是空的。对此有一个低级管道解决方案:

修复使用低级管道命令

首先你得到一个空树哈希:

$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904

然后你使用树哈希创建一个空提交

$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

最后,您将 master 重置为该提交

$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

在我的博文中有进一步的描述

于 2019-06-30T12:07:30.677 回答
3

您可以尝试将主分支重置为第一个提交,git checkout master; git reset --hard ${sha-of-first-commit}然后修改该第一个提交以删除其中的文件。

这应该给你一个原始的 master 分支,并且保持所有其他的不变,但是由于你正在重写历史,所有克隆你的存储库都需要修复。

于 2013-03-16T21:01:53.340 回答
3

这可能是不好的做法,但在果酱中起作用(建立在 aragaer 的解决方案之上)

git branch -D master
git checkout --orphan master
git rm -rf *

在此之后,要从当前正在处理的开发分支将 PR 提交到此分支而不会出现问题,请执行

git checkout development-branch-name
git rebase master
git push -f development-branch-name

现在您可以提交 PR from development-branch-nameintomaster而不会There isn't anything to compare. Nothing to compare, branches are entirely different commit histories在 GitHub 上遇到问题。

当我在当前正在进行的项目目录中初始化一个 repo 并希望通过 GitHub UI 对项目目录中的所有代码进行代码审查时,我会使用它。

于 2017-09-29T21:33:56.113 回答
1

结帐到本地存储库的主分支并删除所有内容怎么样。然后将此分支推送到远程分支(原点)

您是否删除了主分支或分支本身的内容?

于 2013-03-16T20:52:50.263 回答