git fetch --all --prune
是否清除所有已删除的分支,而不管我是哪个分支?
还是应该仅在master
分支中运行?
答案 0 :(得分:1)
获取不会删除本地分支。如果还要从本地删除它们,则可以运行git fetch --prune
,然后执行以下操作:
git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
答案 1 :(得分:1)
首先,请注意git fetch --all
意味着要从所有 remotes 中获取。大多数克隆只有一个名为origin
的 one 远程服务器。因此,--all
在这种情况下毫无意义。只有在以下情况下:
$ git remote
列出不止一个--all
做任何事情的遥控器:例如,如果您同时拥有origin
和upstream
,则git fetch --all
与{{1 }}。
与此同时,当Felipe Cabargas answered(我赞成)时,git fetch origin; git fetch upstream
标志告诉您的Git删除不再存在的远程跟踪名称(不是分支名称!)。在遥控器上。例如,假设您只有一个名为--prune
的遥控器。在origin
上,您照常有一个名为origin
的分支。您还曾经有两个功能分支:master
和feature-short
。所以你跑了
feature-tall
现在您在您的 Git存储库中:
$ git fetch
现在某人已从$ git branch -r
origin/HEAD -> origin/master
origin/feature/short
origin/feature/tall
origin/master
中删除 feature/short
,因为一切都已完成。如果您仅运行origin
,则您仍然有git fetch
。但是,如果您运行origin/feature/short
,您的 Git将删除您的 git fetch --prune
。
如果您创建了自己的origin/feature/short
,该怎么办?好吧,这是您的分支。这根本不是feature/short
的{{1}}的副本! 1 您的 Git将单独留下您的分支。您的Git正在将origin
的分支(例如feature/short
和origin
)复制到您的 远程跟踪名称,例如{ {1}}和feature/short
。 Prune将删除您的远程跟踪名称,但不会触摸您的分支。
1 它可能已经开始作为副本,甚至您可能想要将其保留。但这是您的分支名称,您可以随意使用。如果您只想跟踪原产地的feature/tall
,则最好使用origin/feature/short
,Git将对其进行自动更新来跟踪origin/feature/tall
' s feature/short
。这就是origin/feature/short
是远程跟踪名称而不是分支名称的原因:通过在每个origin
上进行更新,它跟踪远程分支。
如果您设置feature/short
来修剪它,则在适当的时候也会自动删除它。如果您不希望发生这种情况,则可以告诉origin/feature/short
进行 not 修剪,或者您可以创建自己的实际本地分支。