为新项目创建一个新的空分支



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

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

git rm --cached -r .

并添加文档文件,提交它们并将其推到GitHub。

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

正确答案是创建一个孤儿。我解释了如何在我的博客上详细执行此操作。(存档链接)

...

启动之前,升级到最新版本的Git。确保;确定 您正在运行最新版本,run

which git

如果它吐出了旧版本,则可能需要使用 包含您刚安装的版本的文件夹。

好吧,我们已经准备好了。在包含您的git的文件夹中进行CD后 结帐,创建一个孤儿分支。在此示例中,我将 分支" 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

2022 UPDATE

从GIT 2.23开始,您可以使用git switch --orphan <new branch>创建一个没有历史记录的空分支。与git checkout --orphan不同,所有 tracked 将删除文件。

一旦您实际上在该分支上提交,就可以将其推到远程存储库:

git switch --orphan <new branch>
git commit --allow-empty -m "Initial commit on orphan branch"
git push -u origin <new branch>

制作一个空的新分支:

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

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

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

如果这会给您带来很多 git rmgit mv的情况,这可能比git branch --orphan更方便。

尝试

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

看看这是否有助于您提出的问题。另外,如果您真的只想获取单个分支--orphan选项如下所示

git checkout --orphan <branch name>

,您将能够创建一个新的分支并直接检查新分支。它将是一个无父母的分支。

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

git rm --cached -r

详细说明--orphan的作用:

--orphan <new_branch>
创建一个名为<new_branch>的新孤儿分支,从<start_point>开始,然后切换到它。对这个新分支的第一个提交将没有父母,这将是与所有其他分支机构完全脱节的新历史的根源。

索引和工作树被调整,好像您先前运行了git Checkout&lt; start_point&gt;。这使您可以启动一个新的历史记录,该历史记录一组类似于&lt; start_point&gt;通过轻松运行git commit -a来制作root commit。

当您想在不展示其完整历史的情况下从提交中发布树时,这可能很有用。您可能需要这样做以发布一个项目的开源分支,该项目的当前树是"干净",但其完整的历史记录包含专有或以其他方式的代码。

如果要启动一个断开连接的历史记录,该历史记录一组与'start_point&gt; start_point&gt;的路径集,那么您应通过运行Git RM来创建孤儿后立即清除索引和工作树-rf。从工作树的顶层。之后,您将准备好准备新文件,通过从其他地方复制,提取TARBALL等来重新填充工作树,等等。版本没有-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>

假设您有一个带有文件/目录的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

在基础上,hiery nomus的答案。

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

git checkout --orphan <branchname>

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

git rm --cached -r .

,然后您只需用空提交即可提交分支,然后推动

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

我在这里找到了

如果您使用Git 2.23或更高版本,则可以用于git switchgit restore而不是git checkout

因此,如果您需要一个空的分支,请尝试以下操作:

git switch --orphan YourNewBranch

就是这样:)

我找到了此帮助:

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"

最新更新