Git Remote prune-没有显示我期望的那么多修剪过的枝条

来自手册页:

Deletes all stale tracking branches under <name>.
These stale branches have already been removed from the remote repository
referenced by <name>, but are still locally available in "remotes/<name>".

所以我移除了一些树枝

git push origin :staleStuff

然后就跑了

git remote prune origin

然而,只修剪了一个本地分支。这些分支机构有些是我创建的,有些是同事创建的。这是否意味着我一开始没有正确追踪那些树枝?

124603 次浏览

当您使用 git push origin :staleStuff时,它会自动删除 origin/staleStuff,所以当您运行 git remote prune origin时,您已经删除了一些被其他人删除的分支。更有可能的情况是,您的同事现在需要运行 git prune来删除您删除的分支。


那么 git remote prune到底是做什么的呢?主要思想: 本地分支(非跟踪分支)不接触 git remote prune命令,应手动删除。

Now, a real-world example for better understanding:

您有一个具有两个分支的远程存储库: masterfeature。假设您同时处理这两个分支,因此您的本地存储库中就有了这些引用(为了避免混淆,给出了完整的引用名称) :

  • refs/heads/master(简称 master)
  • refs/heads/feature(简称 feature)
  • refs/remotes/origin/master(简称 origin/master)
  • refs/remotes/origin/feature (short name origin/feature)

现在,一个典型的场景:

  1. 其他一些开发人员完成 feature上的所有工作,将其合并到 master中,并从远程存储库中删除 feature分支。
  2. 默认情况下,执行 git fetch(或 git pull)时,不会从本地存储库中删除任何引用,因此仍然保留所有这4个引用。
  3. 您决定清理它们,并运行 git remote prune origin
  4. Git 检测到 feature分支不再存在,因此 refs/remotes/origin/feature是应该删除的 不新鲜分支。
  5. 现在有3个引用,包括 refs/heads/feature,因为 git remote prune不删除任何 refs/heads/*引用。

通过 branch.<branch_name>.merge配置参数可以识别与远程跟踪分支相关联的本地分支。这个参数对于任何工作都不是必需的(可能除了 git pull) ,所以它可能丢失了。

(更新的例子和有用的信息从评论)