68

我刚刚发现git checkout --orphan,但我不知道如何使用它。它的帮助页面说它创建了一个新的无父分支

master分支中,我尝试过git checkout --orphan br,只是看到工作目录中的文件更改为“要提交的更改”,并且git logfatal: bad default revision 'HEAD'.

那么使用有什么好处 git checkout --orphan呢?

4

4 回答 4

80

for 的核心用途是在非新存储库上git checkout --orphan创建类似状态的分支。git init

如果没有这个能力,你所有的 git 分支都会有一个共同的祖先,你的初始提交。这是一种常见的情况,但绝不是唯一的情况。例如,git 允许您将多个独立项目作为单个存储库中的不同分支进行跟踪。

这就是为什么您的文件被报告为“要提交的更改”的原因:在某种git init状态下,尚未创建第一个提交,因此所有文件都是 git 的新文件。

于 2013-11-14T15:16:42.413 回答
20

它被例如GitHub Pages使用,它将一个 repo 的网站存储在 repo 内但在一个单独的分支上。没有理由在此分支上存储网站历史记录以外的任何内容。

于 2013-11-14T14:46:54.330 回答
4

我们正在从私人仓库转移到公共仓库,并且由于敏感的提交信息,我们希望将分支重置为new并将其推送为空白分支。这是一个典型的工作流程方式:

如何删除github中的所有提交历史?

于 2019-01-31T08:06:44.183 回答
0

另一个可能有用的用例是构建机器或虚拟实例以进行测试,这些测试需要特定的 .git 文件夹设置(例如用户、远程 url)并且由于空间限制而丢弃所有历史记录。不使用 Docker 等容器的传统设置通常会出现这种情况。

通常会为专门的部署分支而不是处理 master 来完成。将新分支推送到远程后,在实例上执行以下操作:

git clone [remote-url] --branch [name] --single-branch [folder]

直接使用 master 时,浅克隆将是一个更好的选择(不推荐):

git clone -–depth [depth] [remote-url]
于 2021-11-02T09:51:32.177 回答