我刚刚发现了git checkout --orphan
这个命令,但是我不知道如何使用它。它的帮助页面说它会创建一个新的没有父分支的分支。
在master
分支中,我尝试过git checkout --orphan br
,结果只看到工作目录中的文件变成了“要提交的更改”,而git log
则显示fatal: bad default revision 'HEAD'
。
那么使用git checkout --orphan
有什么优势呢?
我刚刚发现了git checkout --orphan
这个命令,但是我不知道如何使用它。它的帮助页面说它会创建一个新的没有父分支的分支。
在master
分支中,我尝试过git checkout --orphan br
,结果只看到工作目录中的文件变成了“要提交的更改”,而git log
则显示fatal: bad default revision 'HEAD'
。
那么使用git checkout --orphan
有什么优势呢?
git checkout --orphan
的核心用途是在非新建存储库上创建一个类似于git init
状态的分支。git init
状态下,尚未创建第一个提交,因此所有文件对于git来说都是新文件。在我看来,这个命令可能会有些令人惊讶。您可能对此命令有两种非常不同的期望:
正如JB.所解释的那样,git checkout --orphan <branch name>
将会:
master
上,则为master^{tree}
)这意味着您之前所在的提交的树和您创建的紧随其后的提交的树将是相等的:[1]
$ # Let’s say that you’re currently on `master`
$ git checkout --orphan orphan
$ git commit --message 'A new start'
$ git diff master
由于树相等,差异不会给出输出。
这实际上截断了您在master
上拥有的所有提交。(当然,master
还在那里。)
这是我期望它能做到的:
使用案例可能是添加一些文件,以记录一些库级 metadata,例如分支元数据。[2]
结果,您可以使用git switch --orphan <branch name>
来完成此任务,因为它几乎可以做到我期望的git checkout --orphan <branch name>
所做的事情。
.gitignore
这样的方式忽略的所有内容git clean --force -d
但请注意,此命令在撰写本文时(Git 2.40.0)被标记为“实验性”。
git checkout --orphan <branch name>
完成相同的操作也许您不想使用实验性命令。如果您想要从头开始创建一个新树,则 man git checkout
推荐您执行以下命令:
git checkout --orphan orphan
git rm -rf .
然后你也可以这样做(由我添加):
git clean --force -d
嗯,我猜实际上它们会是完全相同的树,因为它们具有相同的哈希值。 :)
执行以下操作:
$ <创建孤立分支>
$ vim branch-descriptions.txt
$ git add branch-descriptions.txt
$ git commit --message "Init: descriptions"
git clone [remote-url] --branch [name] --single-branch [folder]
当直接使用主分支(不建议)时,浅克隆是更好的选择:
git clone -–depth [depth] [remote-url]
git checkout --orphan <branchname>
您将获得一个没有历史记录但与起始分支相同文件的新分支。 要删除所有文件,请使用以下命令:git rm -rf .
(注意点号,并确保您真正处于正确的分支中;-) 结果是一个没有文件和历史记录的分支。 - golfo