首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Git中清理陈旧的分支的正确方法是什么?

在Git中清理陈旧的分支的正确方法是什么?
EN

Stack Overflow用户
提问于 2018-06-10 05:03:39
回答 1查看 1.4K关注 0票数 0

如果我运行git fetch --all --prune,它会在本地删除陈旧的分支,还是先从克隆中获取所有分支,然后再进行清理。

我注意到一个例子,我在一台机器上执行git push --delete origin some_branch,然后在另一个完整的实例中,在执行完git fetch --all --prunegit pull之后,分支仍然在那里。

我不理解这种行为,怎样才是清理陈旧树枝的正确方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 05:20:07

首先,要知道git fetch中的--all表示所有的远程对象,而不是所有的引用。也就是说,如果您有一个名为origin的普通遥控器,那么--all什么也不做。

接下来,请记住分支名称之间的区别- refs/heads/中的名称,如refs/heads/master-and远程跟踪名称,有时称为远程跟踪分支名称,它是refs/remotes/下的引用,后跟远程跟踪的名称。--prune所做的是删除在特定遥控器上没有对应名称的远程跟踪名称。

git fetch通常做的是:

当从origin.获取时,

  1. 在与该远程存储在一起的URL处调用Git

  1. 让他们列出他们的参考名称(运行git ls-remote查看这些名称)。

  1. 反向获取Git对象-主要是提交对象,但步骤2中的输出中的任何对象都是候选对象-它们拥有我们不想要的对象(基于给定给git fetch的任何其他参数或配置的设置)。

最后,在获得所有对象之后,创建或更新本地名称,通常是基于在该远程服务器上看到的分支名称的refs/remotes/remote/name,形式的

  1. 。但请看下面,因为这一步很复杂。

在此更新期间,如果您启用了剪枝功能(通过--prune或配置选项),您的Git可能会删除一些远程跟踪名称。这一切都发生在运行git fetch和第二个Git命令的git pull可以运行它的第二个Git命令之前。

最后,请注意,为了让--prune正常工作,您需要一个典型的remote.remote.fetch设置,例如,remote.origin.fetch将读取+refs/heads*:refs/remotes/origin/*,然后git fetch --prune将从您自己的存储库中删除一个refs/remotes/origin/xyzzy,如果在remote.origin.url的Git存储库中没有refs/heads/xyzzy。如果您创建了--single-branch克隆,则remote.origin.fetch行将具有不同的内容,并且--prune将无效。

根据您所观察到的,您可能有一个非标准的remote.origin.fetch设置,这可能是因为您已经将克隆创建为单分支克隆。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档