为新项目创建新的空分支

问题描述 投票:347回答:7

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

似乎可以使分支正常运行,但是当我执行访存或提取操作时,它会从其他分支下载信息,然后我还会从其他项目中获得一些额外的文件。最好的解决方案是什么?

git branch git-branch
7个回答
661
投票

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

git checkout --orphan <branchname>

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

git rm --cached -r .

并添加文档文件,提交并提交到github。

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


71
投票

正确的答案是创建一个孤立的分支。我在博客上详细说明了如何执行此操作: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

12
投票

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

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 --orphangit rm要做的事情,那么它可能比git mv更方便。

尝试

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

看看这是否有助于解决您的太多问题。另外,如果您确实只想获取单个分支,则仅在命令行上指定它是最安全的。


8
投票

如果您的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>

7
投票

假设您有一个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

[在第2步中,我们只是在本地删除所有文件,以避免与新分支上的文件以及您在master分支中保留的文件混淆。然后,我们在步骤3中取消所有这些文件的链接。最后,在步骤4及之后的步骤中使用新的空分支。

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

git checkout master 
git checkout new_branch

1
投票

基于此answer from Hiery Nomus

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

git checkout --orphan <branchname>

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

git rm --cached -r .

然后您只需使用空提交提交分支,然后推送

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

1
投票

[检出this documentation,其中包含有关]的明确详细信息>

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

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

© www.soinside.com 2019 - 2024. All rights reserved.