清洁拆下的树枝

时间:2018-08-09 15:18:21

标签: git git-branch

git fetch --all --prune是否清除所有已删除的分支,而不管我是哪个分支?
还是应该仅在master分支中运行?

2 个答案:

答案 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做任何事情的遥控器:例如,如果您同时拥有originupstream,则git fetch --all与{{1 }}。

与此同时,当Felipe Cabargas answered(我赞成)时,git fetch origin; git fetch upstream标志告诉您的Git删除不再存在的远程跟踪名称(不是分支名称!)。在遥控器上。例如,假设您只有一个名为--prune的遥控器。在origin上,您照常有一个名为origin的分支。您还曾经有两个功能分支:masterfeature-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/shortorigin)复制到您的 远程跟踪名称,例如{ {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 修剪,或者您可以创建自己的实际本地分支。