如果没有合并,删除后git分支会发生什么?

时间:2016-01-09 14:36:13

标签: git github

我有一个小型仓库,有一个主人和一个实验分支,用于尝试一些新功能。我决定不在master上实现这些功能。

当我使用dlsym()删除该分支时,实验分支的提交会发生什么? git会保留一些不可访问的残余物吗?如果我记得很清楚,我在该分支上有标签,并将其上传到github。这会导致任何问题吗?

修改

我按照建议检查gitk --all,提交图如下所示:

git push origin --delete <branchName>

我想删除所有提交的babel分支,我不希望它可以恢复。这可能吗?

3 个答案:

答案 0 :(得分:15)

删除分支只会这样做:删除分支。由于分支只是对提交的引用,因此只有该引用消失了。提交仍在那里。

与编程语言类似,Git有一个垃圾收集,最终将删除不再引用的提交对象。因此,如果该分支是指向该提交的唯一指针,您将有效地失去对它的访问权限,并且它将很快被删除。

如果您有其他引用,包括间接引用该提交的其他分支,标记和提交(即该提交是父项),则仍然引用提交,并且不会删除它。

因此,如果您想要删除 commit ,则需要删除对该提交的所有引用。如果你想删除分支,并且有其他东西引用来自该分支的提交,那么这不是问题而且不会导致问题:所需的行为是提交然后被保留以便其他东西不会破坏

答案 1 :(得分:1)

是的,git会保留一些不可访问的残余 - 至少从一开始就是这样。无法从现有分支或标记访问的提交称为悬空提交。请参阅此问题,例如:Git: what is a dangling commit/blob and where do they come from?

如果您在分支上创建了标签并将这些标签推送到GitHub,那么标签仍然存在于您的本地存储库中,因此不会删除那些标签中的可访问提交。

您可以使用例如gitk --all来显示本地存储库中的所有分支和标记,如果您看到旧分支上已删除的标记,则可以删除每个标记,使用

git tag -d TAG-NAME

在本地删除标记,并使用以下方法从GitHub中删除标记:

git push origin :refs/tags/TAG-NAME

当git在存储库中执行垃圾收集时,最终会删除不可访问的提交。正如其他Stack Overflow问题中所述,Maintenance and Data Recovery上的git-scm.com部分提供了更多相关信息。

答案 2 :(得分:1)

  

删除时,实验分支的提交会发生什么   那个分支使用git push origin --delete <branchName>

特定分支将在您的本地和远程存储库中删除。我可能无法再次恢复它。

  

git会保留一些无法访问的遗留物吗?

根据这个答案https://stackoverflow.com/a/4674570/1654730,可以在reflog的帮助下恢复分支。

  

如果我记得很清楚,我在该分支上有标签并将其上传到   github上。这会导致任何问题吗?

这不应该导致任何问题。如果您在该分支上有标记,您仍然可以访问标记并基于它们创建新分支。