我们正在使用git存储库来存储我们的项目。我们的分支脱离了原来的分支。但是现在我们想要创建一个小的新项目来跟踪一些文档。为此,我们需要创建一个新的空分支来开始存储我们的文件,并且我希望网络上的其他用户克隆该分支。
我们怎么做呢?
我试过一些方法,但都没用。
$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc
它似乎推了分支,但当我进行取回或拉取时,它从其他分支下载信息,然后我也从其他项目获得一些额外的文件。最好的解决办法是什么?
最好的解决方案是使用——orphan选项创建一个新的分支,如下所示
git checkout --orphan <branch name>
这样您就可以创建一个新分支,并直接签出到新分支。它将是一个没有父母的分支。
默认情况下——orphan选项不会删除工作目录中的文件,所以你可以通过以下方法删除工作目录中的文件:
git rm --cached -r
——orphan的具体作用:
——孤儿< new_branch >
创建一个新的孤儿分支,命名为<new_branch>,从<start_point>开始并切换到它。在这个新分支上进行的第一次提交将没有父节点,它将是一个与所有其他分支和提交完全断开的新历史的根节点。
索引和工作树被调整,就像你之前运行git checkout <start_point>一样。这允许你开始一个新的历史记录,记录一组类似于<start_point>的路径,通过简单地运行git commit -a来进行根提交。
当您希望从提交中发布树而不暴露其完整历史时,这可能很有用。您可能希望这样做来发布一个项目的开源分支,该项目的当前树是“干净的”,但其完整的历史记录包含专有的或其他阻碍的代码位。
如果你想启动一个断开连接的历史记录,记录一组完全不同于<start_point>的路径,那么你应该在创建孤分支后立即通过运行git rm -rf清除索引和工作树。从工作树的顶层。然后你就可以准备好你的新文件,重新填充工作树,从其他地方复制它们,提取一个tarball,等等。
创建一个空的新分支,像这样:
true | git mktree | xargs git commit-tree | xargs git branch proj-doc
如果你的proji -doc文件已经在一个单独的子目录下提交,你可以这样创建新的分支:
git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc
这可能比git分支——orphan更方便,如果它会让你有很多git rm和git移动要做的话。
Try
git branch --set-upstream proj-doc origin/proj-doc
看看这能不能帮你解决"多拿"的问题。另外,如果你真的只想获取一个分支,在命令行上指定它是最安全的。