我想创建一个新的GitHub分支,称为release。
release
这个分支需要是空的!然而,有一个现有的分支有x次提交,我不想有它的提交历史。
我找到的唯一方法是创建一个当地的 --orphan分支。
--orphan
你也可以按照指令在这里在你的master分支的根创建一个空提交。然后在空根提交所在的地方创建你的release分支。
master
从git 2.27版本开始,你现在可以使用git switch --orphan <new branch>来创建一个没有历史记录的空分支。
git switch --orphan <new branch>
与git checkout --orphan <new branch>不同,这个分支不会有任何来自当前分支的文件(保存那些git无法跟踪的文件)。
git checkout --orphan <new branch>
这应该是创建没有历史记录的空分支的首选方法。
一旦你真的在这个分支上提交了,它就可以通过git push -u origin <branch name>推送到github:
git push -u origin <branch name>
git switch --orphan <new branch> git commit --allow-empty -m "Initial commit on orphan branch" git push -u origin <new branch>
最初的回答:
--orphan选项有什么问题?如果你想要一个空的分支,没有历史记录,这是一种方法…
git checkout --orphan empty-branch
然后你可以删除你在暂存区的所有文件(这样它们就不会被提交):
git rm -rf .
此时,您的机器上有一个空分支。
在你可以推送到GitHub(或任何其他Git存储库)之前,你至少需要提交一次,即使它上面没有任何内容(即空提交),因为你不能推送空分支
git commit --allow-empty -m "root commit"
最后,按下遥控器,开瓶啤酒
git push origin empty-branch
--orphan很适合在本地创建一个空分支,但是,为了推动它或与其他分支交互,你需要提交。
在孤立分支上创建一个新的提交并不是一个好主意,因为您将无法与其他分支交互。即。
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'
得到了我想要的,没有合并/拉请求问题。我只是必须选择一个基本提交来创建我的第二个分支从。
公认的答案确实是正确的选择。然而,如果你已经有其他分支不能合并到新创建的新开发分支,我个人最喜欢的解决方案是执行一个rebase,在需要合并开发的分支上执行以下命令:
git rebase develop
这样,最初的提交也将是合并分支上的第一个提交。当然有一个警告:)您正在通过执行rebase重写分支上的历史。所以你必须强制将分支推到原点:
git push -f
其他也使用分支,将无法拉现在,所以他们将不得不执行的rebase以及,本地,在获取发展。假设它们位于需要重基的分支上:
git fetch git rebase origin/develop