114

从手册页:

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

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

4

1 回答 1

191

当你使用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/*引用。

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

(更新了示例和评论中的有用信息)

于 2010-10-28T08:27:42.683 回答