我想创建一个新的GitHub分支,叫做release。

这个分支需要是空的!然而,有一个现有的分支有x次提交,我不想有它的提交历史。

我找到的唯一方法是创建一个本地孤儿分支。


当前回答

您还可以按照这里的说明在主分支的根创建一个空提交。然后在那个空的根提交所在的地方创建你的发布分支。

其他回答

——orphan用于在本地创建一个空分支,但是,为了推动它或与其他分支交互,你将需要一个commit。

在孤立分支上创建一个新的提交并不是一个好主意,因为您将无法与其他分支交互。即。

git checkout --orphan test
git commit --allow-empty -m "init test branch"
git merge master
fatal: refusing to merge unrelated histories

相反,您应该更喜欢从master的第一次提交创建一个新分支。如果提交不是空的,您可以在第一个提交之前添加一个空提交,如@houtanb所述。

您还可以按照这里的说明在主分支的根创建一个空提交。然后在那个空的根提交所在的地方创建你的发布分支。

这个公认的答案给我带来了一些问题,所以我这样做了:

$ git branch
* staging
$ git branch master c74d99cf46f6ed23e742f2617e9908294b4a608b
$ git checkout master
Switched to branch 'master'

得到了我想要的,没有合并/拉请求问题。我只需要选择一个base commit来创建我的第二个分支。

公认的答案确实是正确的选择。然而,如果你已经有其他分支不能合并到新创建的新开发分支,我个人最喜欢的解决方案是执行一个rebase,在需要合并开发的分支上执行以下命令:

Git rebase开发

这样,最初的提交也将是合并分支上的第一个提交。当然有一个警告:)您正在通过执行rebase重写分支上的历史。所以你必须强制将分支推到原点:

Git push -f

其他也使用分支,将无法拉现在,所以他们将不得不执行的rebase以及,本地,在获取发展。假设它们位于需要重基的分支上:

git fetch
git rebase origin/develop

2021年11月更新:从git 2.27版开始,你现在可以使用git开关——orphan <new branch>来创建一个没有历史记录的空分支。

与git checkout -orphan <new branch>不同,这个分支不会有任何来自当前分支的文件(保存那些git无法跟踪的文件)。

这应该是创建没有历史记录的空分支的首选方法。

一旦你真的在这个分支上提交了,它可以通过git push -u origin <分支名>推送到github:

git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>

最初的回答:

孤家寡人的选择有什么错?如果你想要一个空的分支,没有历史记录,这是一种方法…

git checkout --orphan empty-branch

然后你可以删除你在暂存区的所有文件(这样它们就不会被提交):

git rm -rf .

此时,您的机器上有一个空分支。

在你可以推送到GitHub(或任何其他Git存储库)之前,你至少需要提交一次,即使它上面没有任何内容(即空提交),因为你不能推送空分支

git commit --allow-empty -m "root commit"

最后,按下遥控器,开瓶啤酒

git push origin empty-branch