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

时间:2013-03-16 20:47:43

标签: git git-branch

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

这可能吗?如何?

6 个答案:

答案 0 :(得分:46)

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

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

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

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

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

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

答案 1 :(得分:35)

创建一个孤儿分支

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

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

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

答案 2 :(得分:3)

这可能是一种不好的做法,但是在堵塞的情况下工作(建立在aragaer&#39的解决方案之上)

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

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

如何检查本地存储库的主分支并删除所有内容。然后将此分支推送到远程分支(原点)

你删除主分支或分支本身的内容吗?

答案 5 :(得分:0)

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

使用低级管道命令修复

首先,您会得到一个空的树哈希:

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

然后您使用树形哈希创建一个空的提交

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

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

$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22

它是further described in my blogpost