主分支未正确删除

时间:2019-10-18 15:07:15

标签: git

我正在尝试将我的master分支重命名为development

git checkout -b development master
git push -u origin development
git branch -d master
git push --delete origin master
git remote prune origin

工作正常。但是,如果我尝试克隆我的存储库,我将进入一个空文件夹,并且需要执行git checkout development

克隆时如何将development设置为默认分支?

2 个答案:

答案 0 :(得分:1)

要添加到Schleis' answer,请在使用git clone运行-b <branchname>时告诉您的Git最后一步。请记住,git clone url dest实际上是此六步命令序列的缩写:

  1. mkdir dest,以创建一个新的空目录。如果省略 dest 参数,Git将根据您提供的 url 构建一个参数。 (如果命名现有目录,则该目录必须为空。)其余操作将像通过cd dest一样在此目录中运行,尽管这不会影响您的shell。

  2. git init:这将在否则为空的目录中创建一个新的空存储库.git目录。

  3. git remote add origin url:这会将名为origin的远程添加到此新的空存储库的配置中。 (如果需要,可以通过origin的{​​{1}}选项选择-o以外的其他名称。)如果使用git clone,则单个分支有效地通过这点。 (我之所以说“有效”,是因为该过程的这一部分内置于--single-branch命令本身中。)

  4. 设置您在git clone命令中指定的所有其他git config命令(在单词git clone之后添加-c选项:clone选项之前单词-c可能适用于克隆过程,但未在克隆中的中设置

  5. 运行clone(或您选择的任何远程名称)。这将获取在URL上发布的所有提交。它还从另一个Git获取分支和标记名称(和其他引用)的列表;这些分支名称将成为您的远程跟踪名称,此时,这些标记名称通常也将复制到您的存储库中。 1

  6. 最后,您的Git选择一些分支名称,以有效地传递到git fetch origin。您的Git转到git checkout的哪个分支名称?答案取决于您是否提供git checkout标志。

如果您提供-b,您的Git将尝试-b foo。这取决于是否存在git checkout foo,它是在第5步中由Gem的origin/foo创建的。如果您提供foo,您的Git将尝试进行-b master。但是,如果您提供任何 git checkout master,则您的Git会问他们的 Git哪个分支他们推荐。

在这种情况下,发生的情况是他们的Git正在推荐-b,或者不推荐任何东西。我们无法从您所发布的内容中分辨出是哪种情况,但这无关紧要,因为它们没有master 。如果他们建议您的Git使用他们的master来制作您的master,这将失败:他们没有master。如果他们根本没有提出建议,您的Git会假设,它最后应该使用master,并会从他们的master寻找您的origin/master,但是你不会有。

因此,无论此时发生什么情况,您的Git都没有要检出的分支。不过,您确实master,是从他们的origin/development复制而来的。因此,您可以运行development,它四处张望,看到您没有git checkout development,四处张望,看到您要做development ,然后做您想要的事情。

  

克隆后如何将开发设置为默认分支?

您可以尝试让他们的 Git推荐该名称。

要以传统方式(非GitHub上的方式)执行此操作,请登录服务器,导航至origin/development存储库(无论位于何处),然后运行:

--bare

,现在他们的Git会推荐git symbolic-ref HEAD refs/heads/development

要在GitHub上执行此操作,请参见GitHub's instructions。要使用其他网络托管服务来做到这一点,请参阅说明,无论它们在哪里。


1 仅当分支或标签名称中记录的对象ID也存在时,分支或标签名称才能存在。因此,如果您限制要复制的提交集,则您的Git可能不得不省略一些名称。例如,如果它们的标签之一(例如development)指向您通过v0.1和/或--single-branch故意忽略的提交,则不能使用该标签。如果他们的分支机构--shallow指向您因为您说debug而未执行的某个提交,那么您将没有--single-branch foo。请注意,origin/debug意味着--shallow

答案 1 :(得分:0)

默认情况下,git将要使用master,大多数存储库将使用此分支作为“稳定”。因此,一般而言,您会希望有这种行为。

但是,在git clone命令中,有一个选项-b <branchname>将签出特定分支或仅克隆命名分支。

https://git-scm.com/docs/git-clone

因此,在您的情况下,您希望将克隆命令更改为git clone -b development <repo>