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