git remote prune - 没有像我预期的那样显示出多少修剪过的树枝

时间:2010-10-28 07:32:05

标签: git version-control branch git-branch git-remote

从手册页:

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

但是,只修剪了一个本地分支。其中一些分支是由我创建的,一些是由同事创建的。这是否表明我首先没有正确跟踪这些分支?

1 个答案:

答案 0 :(得分:185)

当您使用git push origin :staleStuff时,它会自动删除origin/staleStuff,因此当您运行git remote prune origin时,您已修剪了其他人删除的某个分支。您的同事现在更有可能需要运行git prune来摆脱已删除的分支。


究竟git remote prune究竟是什么?主要思想:git remote prune命令不触及本地分支(不跟踪分支),应手动删除。

现在,这是一个更好理解的真实例子:

您有一个包含2个分支的远程存储库:masterfeature。假设您正在处理两个分支,因此您在本地存储库中具有这些引用(给出完整的引用名称以避免任何混淆):

  • refs/heads/master(简称master
  • refs/heads/feature(简称feature
  • refs/remotes/origin/master(简称origin/master
  • refs/remotes/origin/feature(简称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/*引用。
  6. 可以通过branch.<branch_name>.merge配置参数识别与远程跟踪分支相关联的本地分支。任何工作都不需要此参数(可能除了git pull),因此可能会丢失。

    (使用示例和评论中的有用信息进行更新)