如何删除没有名称的Git分支

如何删除没有名称的Git分支,git,git-rebase,Git,Git Rebase,我不确定这到底是怎么发生的。但在一个重基之后,我有一个无名分离的分支,它是主分支的部分副本。我可能在从一个分支中的一个分支重定基址时犯了一些错误。因此,基本上我如何删除尖端为0ac0e6b的分支 * 11e604e (HEAD -> master) Some comment * a50932a Another comment .... .... * 0d85332 Activities: service <-- dupes below * 5323616 Activities: se

我不确定这到底是怎么发生的。但在一个重基之后,我有一个无名分离的分支,它是主分支的部分副本。我可能在从一个分支中的一个分支重定基址时犯了一些错误。因此,基本上我如何删除尖端为0ac0e6b的分支

* 11e604e (HEAD -> master) Some comment
* a50932a Another comment
....
....
* 0d85332 Activities: service <-- dupes below
* 5323616 Activities: setup   <-- 
* e4f5063 Results: fix        <--
* 5bf3ec0 Composer: update
| * 0ac0e6b XController Setup (tag: sometag)   <-- THIS BRANCH HAS NO NAME
| * a34b800
| * dccbd3b 
| * 020b15e Activities: service   <-- dupes above
| * f4231cf Activities: setup     <--
| * 118536f Results: fix          <--
|/  
* c42ad6f Some comment 
*11e604e(HEAD->master)一些评论
*a50932a另一评论
....
....

*0d85332活动:服务如果要清理存储库,可以使用
git gc
gc
代表垃圾收集器,它删除不必要的(即不属于任何分支的提交)提交。

如果要清理存储库,可以使用
git-gc
gc
代表垃圾收集器,它可以删除不必要的提交(即不属于任何分支的提交)。

正如您所发现的,Git要想首先找到提交,必须查看提交的名称。在本例中,这是一个标记名

最奇怪的部分是这个
git log--all--decoration--oneline--graph
output,我将只截取两个关键行(和一个“…”):

第一个示例向我们显示您正在使用
--decoration
:提交显示为Git在括号中找到提交的名称

然后我们进入神秘世界。由于您使用的是
--decoration
,因此应为:

这会告诉我们标签
sometag
就是Git发现这个新引入的提交流的名字

一旦Git找到任何特定的提交,它当然会使用该提交的父散列ID来查找提交的父散列ID,因此:

| * a34b800
| * dccbd3b 
诸如此类的事情并不神秘:它们是通过hash ID“真实名称”找到的,就像commit
0ac0e6b
一样。特别是,
a34b800
0ac0e6b
的父级,
dccbd3b
a34b800
的父级,依此类推

这实际上是对Git的一个关键洞察 值得考虑的是:Git中的分支名称不会创建提交。它只是让Git找到提交,它通过直接指向一个justone-commit来实现。Git调用这个指针来提交分支的尖端

为了向现有分支添加新提交,Git所做的是:

  • 写出一个新的提交,包括它的源快照、作者姓名以及在
    git log
    中看到的所有其他常用元数据。这些元数据位之一是提交的父ID哈希

    新提交的父ID是分支名称所指向的提交:

    ... <--commit <--commit <--current-tip-commit   <-- branchname
                                     \
                               new-commit-just-made
    

     正如您所发现的,Git首先要找到提交,它必须查看提交的名称。在本例中,这是一个标记名

    最奇怪的部分是这个
    git log--all--decoration--oneline--graph
    output,我将只截取两个关键行(和一个“…”):

    第一个示例向我们显示您正在使用
    --decoration
    :提交显示为Git在括号中找到提交的名称

    然后我们进入神秘世界。由于您使用的是
    --decoration
    ,因此应为:

    这会告诉我们标签
    sometag
    就是Git发现这个新引入的提交流的名字

    一旦Git找到任何特定的提交,它当然会使用该提交的父散列ID来查找提交的父散列ID,因此:

    | * a34b800
    | * dccbd3b 
    
    诸如此类的事情并不神秘:它们是通过hash ID“真实名称”找到的,就像commit
    0ac0e6b
    一样。特别是,
    a34b800
    0ac0e6b
    的父级,
    dccbd3b
    a34b800
    的父级,依此类推

    这实际上是对Git的一个关键洞察 值得考虑的是:Git中的分支名称不会创建提交。它只是让Git找到提交,它通过直接指向一个justone-commit来实现。Git调用这个指针来提交分支的尖端

    为了向现有分支添加新提交,Git所做的是:

    • 写出一个新的提交,包括它的源快照、作者姓名以及在
      git log
      中看到的所有其他常用元数据。这些元数据位之一是提交的父ID哈希

      新提交的父ID是分支名称所指向的提交:

      ... <--commit <--commit <--current-tip-commit   <-- branchname
                                       \
                                 new-commit-just-made
      

      。。。你是说一个分离的头,一个以空字符串作为名字的分支,还是别的什么?我不确定这个词是否正确。但是您可以在上面的输出中看到。右侧的分支(c42ad6f~0ac0e6b)没有名称。这就是我要删除的内容。@Gazzer我看不到任何重复的内容!你确定你在其他地方有它吗?@Gazzer只有一个
      XController设置
      @Gazzer
      -D
      选项用于
      git分支
      只需删除分支名称。承诺将被保留!你是说一个分离的头,一个以空字符串作为名字的分支,还是别的什么?我不确定这个词是否正确。但是您可以在上面的输出中看到。右侧的分支(c42ad6f~0ac0e6b)没有名称。这就是我要删除的内容。@Gazzer我看不到任何重复的内容!你确定你在其他地方有它吗?@Gazzer只有一个
      XController设置
      @Gazzer
      -D
      选项用于
      git分支
      只需删除分支名称。承诺将被保留!我认为这里的问题是另一回事。分支似乎没有自动删除,因为它包含标记。我仍然无法解释为什么会出现这个(几乎)重复的分支。@Gazzer我找不到任何选项来保存原始分支。另外,作为一个讨厌的解决方案,如果分支有无用的提交,您可以从该分支中删除标记,并使用
      gc
      删除它。我认为这里的问题是其他问题。分支似乎没有自动删除,因为它包含标记。我是
      ... <--commit <--commit <--current-tip-commit
                                       \
                                 new-commit-just-made   <-- branchname