2016-07-25 56 views
1

是否可以从标签“取消”提交? 我想要的是,我想删除binary分支,其中有标签,如下所示;Git - 从标签中取消链接提交?

master ----A----B----C----D 
binary ----V----W----X----Y 
      \ \ \ \ 
      tag1 tag2 tag3 tag4 

我试着用$ git push origin :binary删除它。

该命令从远程服务器删除binary分支,但存储库大小与以前相同。

我认为这是因为标签被连接到V W X Y提交。

如何彻底删除binary分支及其内容而不删除标签?

+0

如果这些提交被其他分支引用,那么即使删除'binary'分支,Git也会保留它们。即使提交不在其他地方引用,它们仍可能在reflog中存在一段时间。看看[这里](http://stackoverflow.com/questions/3765234/listing-and-deleting-git-commits-that-are-under-no-branch-dangling)阅读关于垃圾回收的Git。 –

回答

3

答案是否定的(如果您已经推送标签)和“是,排序”(如果这些标签只存在于您的本地存储库中)。

Git标签仅仅是提交的“指针”。换句话说 - 标签的内容是特定提交的ID(请亲自参考$ cat .git/refs/<path to some tag>)。你不能改变它 - 最好你可以做的是删除标签并创建新的。

如果您推送标签,那么它已经结束 - 您不能再将其删除(您可以将它们从远程回购中删除,但不会将其从用户存储库中删除)。

2

标签附加到提交。在不删除附加标签的情况下删除提交没有任何意义。假设这是可能的,标签仍然是孤儿和无用的。

但存储库大小与以前相同。

假设您删除的提交未从其他对象(标记,分支,合并提交)中引用并且其内容可以安全地删除,则存储库大小不会立即更改。您必须强制它运行垃圾回收例程。

对于本地存储库,可以通过运行git gc来完成。我不知道如何触发远程存储库上的垃圾回收。