我想完全清空Git中的主分支(master branch)。目前,我也想保留所有从主分支派生的其他分支。
这是否可能?如何实现?
这是否可能?如何实现?
实际上这被称为“删除旧主分支并从头开始创建新的”
这将创建一个指向初始提交的新主分支:
git branch -D master
git checkout -b master <initial commit hash>
这将创建一个完全独立于您之前拥有的任何分支的全新主分支:
git branch -D master
git checkout --orphan master
git rm -rf *
但实际上,你可以将当前代码库简单地保存到其他位置,并创建一个新的代码库。
git checkout --orphan
仅适用于 git 1.7.2
及以上版本。 - Tuxdudegit commit --allow-empty -m "empty repo"
。 - Ilya Serbis首先,您需要移动或删除当前的主分支。个人而言,我更喜欢将其移开而不是删除它。之后,您只需使用--orphan
标志创建一个没有父节点的新分支。例如:
git branch -m master old_master
git checkout --orphan master
由于当前分支没有历史记录,一些命令可能会失败并显示错误消息,例如fatal: bad default revision 'HEAD'
直到您在新的主分支上进行第一次提交之后。这是正常现象,并且与初次初始化的代码库看到的行为相同。
--orphan
选项仅在git 1.7.2中添加。 - Anubian Noobgit checkout my_orphan
git checkout -b master
- stephen.hanson其他答案建议创建一个全新的主分支(就像在空仓库中一样)。但是没有历史记录的主分支并不是一个好的做法。这使得使用变基很困难,因为你永远无法变基第一个提交。任何存储库上的主分支的第一个提交应该是空的。 这里有一个低级别的管道解决方案:
首先获取一个空树哈希:
$ git hash-object -t tree /dev/null
4b825dc642cb6eb9a060e54bf8d69288fbee4904
$ git commit-tree -m "inital commit" 4b825dc642cb6eb9a060e54bf8d69288fbee4904
a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
最后,你将主分支重置到那个提交
$ git reset --hard a5c0737b92e5e5d4502e15b93d7a46d1e17b2b22
这在我的博客文章中有更详细的描述。
这里有个可能不太好的做法,但在紧急情况下有效(在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
development-branch-name
的代码提交到master
分支,而不会遇到“没有可比较的内容。无法比较,分支具有完全不同的提交历史记录”的问题。当我在一个正在进行的项目目录中初始化一个仓库并希望通过GitHub UI对该项目目录中的所有代码进行代码审查时,我使用此功能。git rm -rf *
不会删除像 .gitignore
这样的隐藏文件。其次,在 rm -rf
之后,您必须将某些内容提交到 master
。否则,在您检出 development-branch-name
后,新的 master
将消失。 - Alikgit checkout master; git reset --hard ${第一个提交的sha值}
命令重置主分支到第一次提交,并且修改第一次提交以删除其中的文件s。
master
分支中的文件还是完全删除master
分支? - Tuxdude