今天在帮一个朋友解决git问题的时候,我不得不介绍一个 需要与主分支完全分离的分支。 这个分支的内容确实有一个不同的起源 已经在主分支上开发了,但它们将是 在稍后的时间合并到主分支。

我记得我读过约翰·威格利的《Git》 了如何 分支本质上是一个跟随某个对象的提交的标签 约定以及如何将提交绑定到文件树和(可选) 提交到父节点。我们去创建一个无父母的承诺 使用git管道的现有存储库:

所以我们去掉了索引中的所有文件…

$ git rm -rf .

... 从压缩包中提取目录和文件,并将它们添加到 索引……

$ git add .

... 并创建了一个树对象…

$ git write-tree

(git-write-tree告诉我们创建的树对象的sha1sum。)

然后,我们提交了树,没有指定父提交…

$ echo "Imported project foo" | git commit-tree $TREE

(git-commit-tree告诉我们创建的提交对象的sha1sum。)

... 并创建了一个新分支,指向我们新创建的 提交。

$ git update-ref refs/heads/other-branch $COMMIT

最后,我们回到主分支继续工作。

$ git checkout -f master

这似乎按计划进行了。但这显然不是那种 我向那些刚开始学习的人推荐的一些程序 委婉地说,使用git。是否有更简单的方法来创建 新的分支,与发生的一切完全无关 到目前为止在存储库中?


当前回答

如果你现有的内容已经提交了,你现在(Git 2.18 Q2 2018)可以将其提取到它自己的新的孤儿分支中,因为“Git rebase -i——root”的实现已经更新为使用 音序器机械较多。

该排序器现在允许将提交图的整个拓扑移植到其他地方。

参见Johannes Schindelin (dscho)的commit 8fa6eea, commit 9c85a1c, commit ebddf39, commit 21d0764, commit d87d48b, commit ba97aea(2018年5月3日)。 (由Junio C Hamano—gitster—在commit c5aa4bc中合并,2018年5月30日)

Sequencer:允许引入新的根提交 在新的——rebase-merges模式的背景下,它被设计成 特别是允许更改现有的分支拓扑结构 一般情况下,用户可能希望将提交提取到一个全新的 以新创建的根提交开始的分支。 现在可以通过在前面插入命令reset [new root]来实现 选择希望成为根提交的提交。例子:

reset [new root]
pick 012345 a commit that is about to become a root commit
pick 234567 this commit will have the previous one as parent

这与reset命令的其他用法并不冲突,因为 [new root]不是(一部分)有效的引用名称:都是开括号 以及空间是非法的参考名称。

其他回答

有时我只是想在项目中立即创建空分支,然后开始工作,我只会执行以下命令:

git checkout --orphan unrelated.branch.name
git rm --cached -r .
echo "init unrelated branch" > README.md
git add README.md
git commit -m "init unrelated branch"

摘自Git社区手册:

git symbolic-ref HEAD refs/heads/newbranch 
rm .git/index 
git clean -fdx 
<do work> 
git add your files 
git commit -m 'Initial commit'

目前选择的答案是正确的,我想顺便补充一下…

这实际上正是github.com让用户为他们的回购创建Github页面的方式,通过一个称为gh-pages的孤立分支。 这里给出并解释了漂亮的步骤:

https://help.github.com/articles/creating-project-pages-manually

基本的git命令如下:

Git checkout—孤儿gh-pages(在你的repo上创建一个称为gh-pages的无父分支) Git rm -rf。(从分支工作树中移除任何文件) rm”。Gitignore '(甚至Gitignore) 现在添加网站内容(添加index.html等)并提交和推送。 利润。

注意,你也可以在你的repo指定/docs文件夹作为“项目网站”的来源,Github用来建立网站。

希望这能有所帮助!

在最近的Git版本中,至少是2.27,这可以通过switch命令干净地实现:

git switch --orphan <new-branch>

官方文档:https://www.git-scm.com/docs/git-switch

Github有一个叫做项目页面的功能,你可以在你的项目中创建一个特定的命名分支,以提供将由Github提供服务的文件。他们的指示如下:

$ cd /path/to/fancypants
$ git symbolic-ref HEAD refs/heads/gh-pages
$ rm .git/index
$ git clean -fdx

从那里你有一个空的存储库,然后你可以添加你的新内容。