在 Git 中删除不再位于远程仓库中的本地分支

git 删除远端已经被删除然而本地还存在的分支

1. 修剪不在远程仓库上的跟踪分支

git remote prune origin
  • 如果git仓库将branch1被删除,可以用用git remote prune origin删除在本地电脑上的remotes/origin/branch1
    • git remote show origin可以看到下面所示,这样的可以通过git remote prune origin删除
      refs/remotes/origin/branch1         stale (use 'git remote prune' to remove)
      
  • 上述只针对Deletes stale references associated with . 分支(stale为三个月没有提交的分支)
    branch1                    不会被删除
    branch2
    remotes/origin/branch1     删除这个
    remotes/origin/branch2
    

2. 本地分支尚未删除,要实现删除本地分支

git branch -vv | grep 'origin/.*: gone]' | awk '{print $1}' | xargs git branch -d

详解:

  • git branch -vv
    该命令显示本地所有分支关联的远程分支,本地存在但是远端不存在的分支为gone状态。
    branch1   ec2d1b1a [origin/branch1: gone] feat: ***
    branch2   cdc6092d [origin/branch2: behind 45] feat: ***
    branch3   e51edba2 [origin/branch3] Merge branch 'branch3' into dev
    
  • grep 'origin/.*: gone]'
    对于上述结果利用grep命令行语句查找gone得到:
    branch1   ec2d1b1a [origin/branch1: gone] feat: ***
    
  • awk '{print $1}'
  • 使用awk命令行语句分割上面结果
    branch1
    
  • xargs git branch -d
    上述过程得到远端已经删除本地还没删除的分支名称,在通过xargs将其作为参数传给下一个命令git branch -d
Deleted branch branch1 (was ec2d1b1a).

参考

git remote prune origin does not delete the local branch even if its upstream remote branch is deleted

你可能感兴趣的:(git)