本文翻译自:Remove tracking branches no longer on remote

Is there a simple way to delete all tracking branches whose remote equivalent no longer exists? 有一种简单的方法可以删除所有不再具有远程等效项的跟踪分支吗?

Example: 例:

Branches (local and remote) 分支机构(本地和远程)

  • master
  • origin/master 起源/主人
  • origin/bug-fix-a 起源/错误修复
  • origin/bug-fix-b 原点/错误修复-b
  • origin/bug-fix-c 原点/错误修复-C

Locally, I only have a master branch. 在本地,我只有一个master分支。 Now I need to work on bug-fix-a , so I check it out, work on it, and push changes to the remote. 现在,我需要处理bug-fix-a ,所以我将其检出,对其进行处理,然后将更改推送到远程计算机。 Next I do the same with bug-fix-b . 接下来,我对bug-fix-b进行同样的操作

Branches (local and remote) 分支机构(本地和远程)

  • master
  • bug-fix-a 错误修复
  • bug-fix-b 错误修复-b
  • origin/master 起源/主人
  • origin/bug-fix-a 起源/错误修复
  • origin/bug-fix-b 原点/错误修复-b
  • origin/bug-fix-c 原点/错误修复-C

Now I have local branches master , bug-fix-a , bug-fix-b . 现在我有了本地分支masterbug-fix-abug-fix-b The Master branch maintainer will merge my changes into master and delete all branches he has already merged. Master分支维护者将我的更改合并到master中,并删除他已经合并的所有分支。

So the current state is now: 因此,当前状态为:

Branches (local and remote) 分支机构(本地和远程)

  • master
  • bug-fix-a 错误修复
  • bug-fix-b 错误修复-b
  • origin/master 起源/主人
  • origin/bug-fix-c 原点/错误修复-C

Now I would like to call some command to delete branches (in this case bug-fix-a , bug-fix-b ), which are no longer represented in the remote repository. 现在,我想调用一些命令来删除分支(在本例中为bug-fix-abug-fix-b ),这些分支不再在远程存储库中表示。

It would be something like the existing command git remote prune origin , but more like git local prune origin . 这将类似于现有的命令git remote prune origin ,但更像git local prune origin


#1楼

参考:https://stackoom.com/question/WQ8D/删除不再位于远程的跟踪分支


#2楼

Seems solution is here – https://stackoverflow.com/a/1072178/133986 似乎解决方案在这里– https://stackoverflow.com/a/1072178/133986

In short, git remote prune does the magic 简而言之, git remote prune做魔术


#3楼

git fetch -p

这将修剪遥控器上不再存在的所有分支。


#4楼

Remove all branches that have been merged into master, but don't try to remove master itself: 删除所有已合并到master的分支,但不要尝试删除master本身:

git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)

or add an alias: 或添加别名:

alias gitcleanlocal="git checkout master && git pull origin master && git fetch -p && git branch -d $(git branch --merged | grep master -v)"

Explanation: 说明:

git checkout master checkout master branch git checkout master checkout master分支

git pull origin master ensure local branch has all remote changes merged git pull origin master确保本地分支已合并所有远程更改

git fetch -p remove references to remote branches that have been deleted git fetch -p删除对已删除的远程分支的引用

git branch -d $(git branch master --merged | grep master -v) delete all branches that have been merged into master, but don't try to remove master itself git branch -d $(git branch master --merged | grep master -v)删除所有已合并到master的分支,但是不要尝试删除master本身


#5楼

git remote prune origin prunes tracking branches not on the remote. git remote prune origin修剪跟踪不在远程上的分支。

git branch --merged lists branches that have been merged into the current branch. git branch --merged列出已经合并到当前分支中的分支。

xargs git branch -d deletes branches listed on standard input. xargs git branch -d删除标准输入中列出的分支。

Be careful deleting branches listed by git branch --merged . 小心删除git branch --merged列出的git branch --merged The list could include master or other branches you'd prefer not to delete. 该列表可能包含您不希望删除的master分支或其他分支。

To give yourself the opportunity to edit the list before deleting branches, you could do the following in one line: 为了使自己有机会在删除分支之前编辑列表,可以在一行中执行以下操作:

git branch --merged >/tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d </tmp/merged-branches


#6楼

I found the answer here: How can I delete all git branches which have been merged? 我在这里找到了答案: 如何删除所有已合并的git分支?

git branch --merged | grep -v "\*" | xargs -n 1 git branch -d

Make sure we keep master 确保我们保持主人

You can ensure that master , or any other branch for that matter, doesn't get removed by adding another grep after the first one. 您可以通过在第一个分支之后添加另一个grep来确保不会删除master或与此相关的任何其他分支。 In that case you would go: 在这种情况下,您可以:

git branch --merged | grep -v "\*" | grep -v "YOUR_BRANCH_TO_KEEP" | xargs -n 1 git branch -d

So if we wanted to keep master , develop and staging for instance, we would go: 因此,例如,如果我们想保持masterdevelopstaging ,我们将:

git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d

Make this an alias 将此设为别名

Since it's a bit long, you might want to add an alias to your .zshrc or .bashrc . 由于它有点长,您可能想要为.zshrc.bashrc添加别名。 Mine is called gbpurge (for git branches purge ): 我的被​​称为gbpurge (对于git branches purge ):

alias gbpurge='git branch --merged | grep -v "\*" | grep -v "master" | grep -v "develop" | grep -v "staging" | xargs -n 1 git branch -d'

Then reload your .bashrc or .zshrc : 然后重新加载您的.bashrc.zshrc

. ~/.bashrc

or 要么

. ~/.zshrc

删除不再位于远程的跟踪分支相关推荐

  1. 如何删除本地和远程的 Git 分支

    文章目录 前言 一.删除本地分支 二.删除远程分支 三.注意点 总结 前言 我们利用git进行项目管理时,常常需要删除分支,分支分为本地分支和远程分支,本文主要介绍如何删除本地及远程分支. 一.删除本 ...

  2. 开发过程中,本地分支和远程跟踪分支发生了diverge

    1 git基本概念梳理 1.1 git的工作目录.暂存区和HEAD指向的版本库以及branch的概念 一个branch就是整个产品的一套代码,而工作目录中就是存放的本branch最新的代码,HEAD指 ...

  3. git 删除本地和远程分支_如何在本地和远程删除Git分支

    git 删除本地和远程分支 In most cases, it is simple to delete a Git branch. You'll learn how to delete a Git b ...

  4. Git删除本地/本地远程/远程服务器分支

    1.列出分支:git branch -a2.删除本地分支:git branch -D branch_test or git branch --delete branch_test3.删除本地的远程分支 ...

  5. 解决no tracked branch的问题,并详说远程分支、远程跟踪分支和跟踪分支【本地分支】

    目录 问题 分支 远程分支 远程跟踪分支 跟踪分支 什么是跟踪分支 设置跟踪分支 跟踪分支的作用 iss53分支 master分支 serverfix分支 testing分支 定位问题 解决问题 问题 ...

  6. git 删除远程仓库本地分支和删除远程分支,保留本地分支或者删除本地

    本地分支操作 我们比如想把自己的本地分支上传到远程分支让同事去拉取代码,最后完事之后要把它删除 看看怎么做吧!gogogo ☟☟☟ 1. 创建本地分支 创建并切换,推荐 git checkout -b ...

  7. 代码管理平台介绍、安装svn、客户端使用svn、远程仓库、分支管理、标签管理、git别名、搭建git服务、安装gitlab、简单使用gitlab、备份和恢复

    22.1 代码管理平台介绍 现在的开发工作都是由团队合作来完成开发,通常都是团队中的每个人或者每几个人完成一个模块的开发,最后再将模块拼凑起来,形成一个完整的项目,这就涉及到了协同开发.在各个模块的开 ...

  8. 如何删除所有已合并的Git分支?

    我有很多Git分支. 如何删除已经合并的分支? 有没有一种简单的方法可以将它们全部删除,而不是一个一个地删除它们? #1楼 我使用以下Ruby脚本删除我已经合并的本地和远程分支. 如果我要对具有多个远 ...

  9. Git的管理、撤销、删除以及创建远程仓库

    文章目录 管理修改 撤销修改 未提交到缓存区 已经提交到缓存区 删除文件 误删文件 永久删除文件 添加远程仓库 从远程仓库克隆 从本地上传到远程仓库 从远程仓库同步到本地 实战克隆12306 管理修改 ...

最新文章

  1. 中科大计算机专业跟浙江大学计算机专业相比,浙大计算机研究生近年录报比与中国科学技术大学的比较...
  2. store 存取数据数组对象_ios – 如何在数组中保存自定义对象并将其存储在NSUserDefaults – iPhone中...
  3. 前台使用三元运算符判断显示
  4. Ubuntu配置上位机Blackfin开发环境手记
  5. php绘制历史曲线,thinkphp浏览历史功能实现方法
  6. python——input() 的用法及扩展
  7. 天然气表怎么看多少方_上海考大学难度怎么样?看2019上海高考“成绩分布表”和“本科分数线”就知道了!...
  8. libz.dylib的研究 libz.1.2.5.tbd
  9. 英特尔推出新CPU架构!3D封装打破摩尔定律限制,10nm芯片明年上市
  10. C# 从磁盘中读取文件
  11. 客户端如何获取服务器控件的值(原理与实例)
  12. 19.高性能MySQL --- 锁的调试
  13. http状态码大全(最全整理)
  14. 阿里ICON图标,使用教程
  15. 计算某天是星期几-泽勒算法
  16. Ubuntu 使用firefox插件下载百度云文件
  17. ee可以有js吗 jvaa_JAVAEE面试题
  18. 台式计算机用什么电源线,台式机电源怎么选 台式机主机电源如何选择【详解】...
  19. 30系列显卡安装tensorflow1.15
  20. 【统计数字】数字计数

热门文章

  1. 单击事件开启线程时,再次单击就会出现 java.lang.IllegalThreadStateException: Thread already started. 错误
  2. 看图说OpenGL之二之投影矩阵求法
  3. 人生必做清单-----持续更新
  4. 算法---------数组-----------两数相加
  5. Ubuntu12.04配置LAMP 环境
  6. Android7.0多窗口实现原理(一)
  7. Android10.0 Binder通信原理(九)-AIDL Binder示例
  8. (0095)iOS开发之本地文件预览的三种方法(3)
  9. webpack预览页面配置
  10. PHP标记风格,编码规范