为什么 Git 分支没有任何祖先?

4
昨天下午,我的一个同学在git commit中做了如下图片所示的操作。我不知道在git中怎么能做出这样奇怪的事情。通常,每个分支都应该有一个祖先分支存在于之前,至少在我对git的理解中是这样的。

这种git历史记录的方式是如何实现的?它为什么会有用?

Strange Git branch


每个分支都应该有一个在之前存在的祖先分支。那么第一个分支是如何创建的呢? - Maroun
第一个分支没有祖先。这是正确的。但是第一个之后的所有分支都应该有一个祖先。 - FluepkeSchaeng
@FluepkeSchaeng 为什么?一个分支甚至可以有多个祖先。Git非常灵活,如果你能想象到它,你就可以做到 :) - Margaret Bloom
1个回答

5

但是第一个分支之后的所有分支都应该有祖先。

不:您可以随时使用孤立分支创建一个或多个。

git checkout --orphan newbranch

这个新分支上的第一个提交没有父提交,将成为一个全新历史的根,与所有其他分支和提交完全断开联系。在您的情况下,请检查远程repo侧4-x-dev-cam分支的历史记录,并查看其历史记录是否始于一个没有父提交的提交。
为什么要这样做有用?
- repo git本身至少有一个孤立分支(除了master):todo分支,以保留与git源代码本身无关的管理脚本。 - 任何GitHub页面项目都至少有一条孤立分支(除了master):gh-pages,以管理与您的项目相关联的网站。 基本上,每当您需要在相同的repo中管理与您的主要项目正交的内容(管理脚本、用于说明项目的网站等)时,孤立分支是隔离该辅助历史的好方法。
4-x-dev-cam的情况下,一个可能的解释是从头开始对项目进行大规模重写。在这种情况下,孤立分支也是将新历史与以前的分支分开的好方法。

这解释了如何获取这样的提交历史。谢谢您的快速回答。在哪些特定情况下创建孤立分支会有用呢? - FluepkeSchaeng
2
@FluepkeSchaeng 隐藏您的历史记录,例如从公共存储库中。来自Git checkout:"当您想要发布提交树而不暴露其完整历史记录时,这可能非常有用。您可能希望执行此操作以发布项目的开源分支,该项目的当前树是“干净的”,但其完整历史记录包含专有或其他受限制的代码位。" - Margaret Bloom
@FluepkeSchaeng 我已经添加了两个具体的例子,说明了多个孤立分支的情况。 - VonC
这正是我正在寻找的。 :) - FluepkeSchaeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接