如何在Git中完全清空master分支?

Mar*_*ace 41 git git-branch

我想完全清空Git中的master分支.现在,我还想保留所有其他分支机构从硕士分支机构.

这可能吗?怎么样?

ara*_*aer 54

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

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

git branch -D master
git checkout -b master <initial commit hash>
Run Code Online (Sandbox Code Playgroud)

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

git branch -D master
git checkout --orphan master
git rm -rf *
Run Code Online (Sandbox Code Playgroud)

但实际上,您可以将当前存储库保存到其他位置并创建新的存储库.


Tod*_*obs 36

创建一个孤儿分支

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

git branch -m master old_master
git checkout --orphan master
Run Code Online (Sandbox Code Playgroud)

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

  • 在我看来,这实际上是最好的答案.建议将主服务器重置为初始提交的答案并不完全是需要的,因为初始提交不一定处于干净状态. (2认同)

Tom*_*far 7

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

使用低级管道命令修复

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

$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904
Run Code Online (Sandbox Code Playgroud)

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

$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
Run Code Online (Sandbox Code Playgroud)

最后你将 master 重置为那个提交

$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
Run Code Online (Sandbox Code Playgroud)

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