删除不再位于远程的跟踪分支(no i have not)

有没有一种简单的方法来删除其远程等效不再存在的所有跟踪分支?

有没有一种简单的方法来删除其远程等效不再存在的所有跟踪分支?

例子:

分支(本地和远程)

大师

原点 / 母版

origin / bug-fix-a

origin / bug-fix-b

origin / bug-fix-c

在本地,我只有一个主分支。现在我需要在bug-fix-a上工作,所以我检查出来,处理它,并将更改推送到远程。接下来我对bug-fix-b做同样的事情。

分支(本地和远程)

大师

bug-fix-a

bug-fix-b

原点 / 母版

origin / bug-fix-a

origin / bug-fix-b

origin / bug-fix-c

现在我有了本地分支masterbug-fix-abug-fix-b。Master 分支维护者会将我的更改合并到master中,并删除他已经合并的所有分支。

所以现在的状态是:

分支(本地和远程)

大师

bug-fix-a

bug-fix-b

原点 / 母版

origin / bug-fix-c

现在我想调用一些命令来删除分支(在这种情况下bug-fix-abug-fix-b),这些分支不再在远程存储库中表示。

它类似于现有的命令git remote prune origin,但更像git local prune origin

1918

git remote prune origin修剪不在远程的跟踪分支。

git branch --merged列出了已合并到当前分支中的分支。

xargs git branch -d删除标准输入上列出的分支。

请小心删除git branch --merged列出的分支。该列表可能包含master或您不希望删除的其他分支。

为了让自己有机会在删除分支之前编辑列表,您可以在一行中执行以下操作:

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

最安全的方法是将“管道”命令git for-each-ref与插值变量%(upstream:track)一起使用,当分支不再位于远程时,该变量将为[gone]

git fetch -p && for branch in $(git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}'); do git branch -D $branch; done

这种方法比使用“瓷器”命令更安全,因为没有在提交消息的一部分上意外匹配的风险。

git fetch -p && for branch in $(git branch -vv | grep ': gone]' | awk '{print $1}'); do git branch -D $branch; done

这样的工作方式是,在命令

git fetch -p

删除远程引用,当您运行

git branch -vv

它将显示“gone”作为远程状态。例如,

$ git branch -vv
  master                 b900de9 [origin/master: behind 4] Fixed bug
  release/v3.8           fdd2f4e [origin/release/v3.8: behind 2] Fixed bug
  release/v3.9           0d680d0 [origin/release/v3.9: behind 2] Updated comments
  bug/1234               57379e4 [origin/bug/1234: gone] Fixed bug

这是脚本迭代的内容。

450

这些答案中的大多数实际上并没有回答原始问题。我做了一堆挖掘和this是我找到的最干净的解决方案。这里是该答案的稍微更彻底的版本:

检查您的默认分支。通常git checkout master

Rungit fetch-p &&git branch-vv | awk '/:gone]/{print $1}' | xargs git branch-d

说明:

通过修剪您的跟踪分支,然后删除显示它们在git branch -vv中“消失”的本地分支。

Notes:

如果您的语言设置为英语以外的其他语言,则需要将gone更改为相应的单词。仅本地分支不会被触及。已在远程删除但未合并的分支将显示通知,但不会在本地删除。如果您还想删除它们,请将-d更改为-D

369

我通常不会回答一个已经有 16 个答案的问题,但是所有其他答案都是错误的,正确的答案是如此简单。问题说:“是否有一种简单的方法可以删除远程等效不再存在的所有跟踪分支?”

如果“简单”意味着一次性删除它们,而不是脆弱,不危险,并且不依赖并非所有读者都会拥有的工具,那么正确的答案是:不。

有些答案很简单,但他们没有按照要求去做。其他人则按照要求去做,但并不简单:所有这些都依赖于通过文本操作命令或脚本语言解析 Git 输出,这可能并非在每个系统上都存在。最重要的是,大多数建议使用瓷器命令,其输出并非设计为由脚本解析(“瓷器”是指用于人类操作的命令;脚本应使用较低级别的“管道”命令)。

进一步阅读:

why you shouldn't pgit branchoutput in a script. tracking branches and the differences betweengit remote prune,git prune,git fetch--prune

如果您想安全地执行此操作,对于问题中的用例(已在服务器上删除但仍作为本地分支存在的垃圾收集跟踪分支),并且仅使用高级 Git 命令,您必须

git fetch --prune(或git fetch -p,这是一个别名,或git prune remote origin,它在不获取的情况下执行相同的操作,并且可能不是您大多数时候想要的)。

请注意所有报告为已删除的远程分支。或者,要稍后查找它们,请git branch -v(任何孤立的跟踪分支都将标记为“[gone]”)。

每个孤立跟踪分支上的git branch -d [branch_name]

(这是其他一些答案提出的)。

如果你想编写一个解决方案,那么for-each-ref是你的起点,就像Mark Longair's answer这里和this answer to another question,但我看不到一种方法来利用它而不编写一个 shell 脚本循环,或使用 xargs 或东西。

背景说明

要理解正在发生的事情,您需要理解,在跟踪分支的情况下,您没有一个分支,而是三个分支(并记住“分支”只是指向提交的指针)。

给定一个跟踪分支feature/X,远程存储库(服务器)将具有此分支并将其称为feature/X。您的本地存储库有一个分支remotes/origin/feature/X,意思是“这是远程告诉我的功能 / X 分支,上次我们交谈时”,最后,本地存储库有一个分支feature/X指向您的最新提交,并配置为“

在某些时候,有人删除了遥控器上的feature/X。从那一刻起,您将剩下本地的feature/X(您可能不再想要它,因为功能 X 的工作可能已经完成)和remotes/origin/feature/X,这肯定是无用的,因为它的唯一目的是记住服务器分支的状态。

Git 可以让你自己自动清理多余的remotes/origin/feature/X— — 这就是git fetch --prune所做的 — — 但是由于某种原因,它不允许你自动删除你自己的feature/X...即使你的feature/X仍然包含孤立的跟踪信息,所以它有信息来识别已经完全合并的前跟踪分支。(毕竟,它可以给你

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(100)
RandBetween函数
上一篇
如何通过使用 ADB推送带有软件包名称的文件来从三星手机中删除应用程序
下一篇

相关推荐

  • filezilla服务器端配置:如何使用FileZilla服务器配置进行FTP传输

    FileZilla服务器端配置是指在服务器上安装FileZilla服务器软件并进行相关的配置,以便能够使用FileZilla客户端连接到该服务器。…

    2023-01-12 13:39:43
    0 74 87
  • filezilla连接被服务器拒绝:解决Filezilla连接被服务器拒绝的方法

    连接被服务器拒绝是由于您的FTP帐户信息不正确或者您的IP地址被服务器拒绝而导致的。具体原因可能有以下几种:…

    2023-03-15 14:07:40
    0 16 34
  • gaussdb数据库下载强大的数据库管理系统,让你轻松管理大型数据库

    GaussDB是一款基于MySQL的关系型数据库,由华为技术有限公司开发,可以支持大规模的数据处理,提供高性能、高可用的数据库服务。…

    2023-03-24 07:37:24
    0 56 82
  • fifa20球员数据库从技术能力到表现实力的评估

    FIFA20球员数据库是一个由EA Sports创建的数据库,存储了FIFA20游戏中所有球员的详细信息。它包括每个球员的名字、位置、国籍、年龄、身高、体重、速度、力量、弹跳、头球、射门、传球、抢断、盘带、守门、体力等。…

    2023-01-19 08:18:34
    0 89 49
  • django批量更新数据库(含代码示例)

    示例示例Django批量更新数据库是指在Django中一次性更新多条记录,而不是逐条更新。下面是一个示例代码:from django.db.models import F…

    2024-01-13 14:55:00
    0 74 64
  • 小额程序:使用Paypal或其他付款处理服务处理小额付款

    关于小额程序的问题,在paypal payment processing中经常遇到,目前,我使用 PayPal 进行支付处理。几乎 90 % 的项目以 $.99 的价格出售,并希望使用 Paypals 的 Micropayment 帐户,但 PayPal 表示“支持向美国到美国,GB 到 GB,AU 到 AU 以及欧盟到欧盟交易的商家进行小额支付”。我的公司位于美国,但客户非常全球化。这是否意味着使用小额支付选项,我不能从居住在欧洲或美国以外的人那里收取付款…

    2022-12-16 09:37:18
    0 40 37
  • Sinأ:在 sin_addr sin_family等中“sin”是什么意思

    关于Sinأ的问题,在what does sin mean中经常遇到,我是 UNIX 套接字编程的新手,我想知道 sin_addr,sin_family 等中的“sin”是什么?…

    2022-12-12 00:22:15
    0 63 27
  • Rd ma:Arduino 4-20ma精度

    关于Rd ma的问题,在4 20ma sensor arduino中经常遇到,我正在使用 2 Wires Current Loop 将压力变送器 Dwyer MS-121(范围为-100 Pa 至 + 100Pa)连接到 Arduino。对于分流电阻器,我正在使用 220Ohm。因此,要从电压到压力进行计算,这就是我要做的:读数是我从分流电阻器读取的内容…

    2022-12-08 07:58:02
    0 40 10

发表评论

登录 后才能评论

评论列表(60条)