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

Fel*_*xyz 112 git version-control branch git-remote git-branch

从手册页:

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>".
Run Code Online (Sandbox Code Playgroud)

所以我删除了一堆分支

git push origin :staleStuff
Run Code Online (Sandbox Code Playgroud)

然后跑了

git remote prune origin
Run Code Online (Sandbox Code Playgroud)

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

max*_*max 187

当您使用时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,将其合并到远程存储库中masterfeature从远程存储库中删除分支.
  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),因此可能会丢失.

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

  • 你说得对,但在"git prune"的情况下你可能误解了"本地分支"的含义.只有`/ refs/remotes/<remote_name> /`中的分支才会被修剪; `/ refs/heads /`中的任何分支都不会被触及 - 你必须手动管理这些分支. (3认同)
  • 没有内置命令,但您可以自己编写这样的脚本.可以通过存在`branch.<branch_name> .merge`配置参数来识别跟踪分支. (2认同)