如何为新项目创建新的空分支

时间:2012-12-20 09:34:44

标签: git branch git-branch

我们正在使用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

似乎推动分支正常,但是当我进行提取或拉取时,它会从其他分支下载信息,然后我还从其他项目中获取一些额外的文件。什么是最好的解决方案?

8 个答案:

答案 0 :(得分:561)

您可以将分支创建为孤儿:

git checkout --orphan <branchname>

这将创建一个没有父母的新分支。然后,您可以使用以下命令清除工作目录:

git rm --cached -r .

并添加文档文件,提交它们并将它们推送到github。

pull或fetch将始终更新有关所有远程分支的本地信息。如果您只想提取/获取单个远程分支的信息,则需要指定它。

答案 1 :(得分:57)

正确的答案是创建一个孤儿分支。我在我的博客上详细解释了如何做到这一点:http://sidja.in/post/62663941071

  

...

     

开始之前,请升级到最新版本的GIT。确保;确定   你正在运行最新版本,运行

which git
     

如果它吐出旧版本,您可能需要增加PATH   包含刚刚安装的版本的文件夹。

     

好的,我们准备好了。在cd进入包含你的git的文件夹之后   结帐,创建一个孤儿分支。在这个例子中,我将命名为   分支“mybranch”。

git checkout --orphan mybranch
     

删除孤儿分支中的所有内容

git rm -rf .
     

进行一些更改

vi README.txt
     

添加并提交更改

git add README.txt
git commit -m "Adding readme file"
     

就是这样。如果你运行

git log
     

你会注意到提交历史从头开始。换成   回到你的主分支,只需运行

git checkout master
     

您可以通过运行

返回孤立分支
git checkout mybranch

答案 2 :(得分:10)

像这样建立一个空的新分支:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

如果您的proj-doc文件已经在单个子目录下的提交中,您可以通过这种方式创建新分支:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

这可能比git branch --orphan更方便,如果这会让你有很多git rmgit mv

尝试

git branch --set-upstream proj-doc origin/proj-doc

并查看是否有助于您提取太多问题。此外,如果您真的只想获取一个分支,最安全的方法就是在命令行上指定它。

答案 3 :(得分:6)

假设您有一个master分支文件/目录:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

如何制作空分支:

  1. git checkout —orphan new_branch_name
  2. 在执行以下命令之前,请确保您位于正确的目录中:
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name
  8. 在第2步中,我们只是在本地删除所有文件,以避免与新分支上的文件以及您在master分支中保留的文件混淆。 然后,我们在步骤3中取消链接所有这些文件。最后,步骤4和之后使用我们的新空分支。

    完成后,您可以轻松地在分支机构之间切换:

    git checkout master 
    git checkout new_branch
    

答案 4 :(得分:5)

如果git版本没有--orphan选项,则应该使用此方法;

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

做了一些工作后

git add -A
git commit -m <message>
git push origin <newbranch>

答案 5 :(得分:2)

最好的解决方案是使用--orphan选项创建一个新分支,如下所示

git checkout --orphan <branch name>

这样,您将能够创建一个新分支,并直接签出到该新分支。这将是一个无父母的分支。

默认情况下,--orphan选项不会删除工作目录中的文件,因此您可以通过以下方式删除工作目录文件:

git rm --cached -r

详细了解--orphan的作用:

--orphan <new_branch>
创建一个新的孤立分支,名为<new_branch>,从<start_point>开始并切换到该分支。在这个新分支上进行的第一次提交将没有父母,这将是与所有其他分支和提交完全脱节的新历史的根源。

调整索引和工作树,就像您以前运行git checkout 一样。这样,您可以轻松运行git commit -a进行根提交,从而开始一个新的历史记录,该记录记录了一组类似于的路径。

当您要通过提交发布树而不公开其完整历史记录时,这可能很有用。您可能想要执行此操作,以发布项目的开放源分支,该分支的当前树是“干净的”,但是其完整历史记录包含专有的代码或以其他方式妨碍代码的代码。

如果您要启动一个断开连接的历史记录,该历史记录记录的路径集与的路径完全不同,则应在创建孤儿分支后通过运行git rm清除索引和工作树-射频从工作树的顶层开始。然后,您将准备好准备新文件,重新填充工作树,从其他位置复制它们,提取压缩包等。

答案 6 :(得分:2)

以此answer from Hiery Nomus为基础。

您可以将分支创建为孤儿:

git checkout --orphan <branchname>

这将创建一个没有父母的新分支。然后,您可以使用以下命令清除工作目录:

git rm --cached -r .

然后您只需使用空提交提交分支,然后按入

git commit -m <commit message> --allow-empty
git push origin <newbranch>

答案 7 :(得分:2)

我找到了这个帮助:

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