Git 如何删除已完成要素的要素分支

Git 如何删除已完成要素的要素分支,git,git-flow,Git,Git Flow,如何删除已完成要素的要素分支 在我的本地机器上,当我运行“git branch”时,我仍然看到远程repo中不再存在的旧分支 我试着运行:“git fetch-p” 它说删除了一些分支,但当我运行“git branch”时,它们仍然存在 有没有一种方法可以用一个命令将它们全部删除?在git中,您有“分支”,它们是您自己的,也是您自己的;然后你就有了“远程分支”,尽管名称实际上是本地的,但它是根据你的git在与远程git联系时看到的分支创建和删除的,并问它:“嘿,你那边有什么分支?” 运行git

如何删除已完成要素的要素分支

在我的本地机器上,当我运行“git branch”时,我仍然看到远程repo中不再存在的旧分支

我试着运行:“git fetch-p”

它说删除了一些分支,但当我运行“git branch”时,它们仍然存在

有没有一种方法可以用一个命令将它们全部删除?

在git中,您有“分支”,它们是您自己的,也是您自己的;然后你就有了“远程分支”,尽管名称实际上是本地的,但它是根据你的git在与远程git联系时看到的分支创建和删除的,并问它:“嘿,你那边有什么分支?”

运行
git fetch-p
时,它会联系您的远程服务器(通常是
origin
)并获取其分支列表,然后删除远程服务器上的远程分支

当存在像
feature
这样的远程分支时,您执行
git checkout feature
,这将创建一个名为
feature
的本地分支,该分支“跟踪”您的远程分支,称为
origin/feature
。当他们在遥控器上删除其
功能时,您的
git fetch-p
仅删除
remote/feature
分支。因此,本地分支无法跟踪任何内容,但是
git fetch
不会删除本地
功能,只删除
origin/feature
。仅仅因为他们已经完成了他们的任务,并不意味着你已经完成了你的任务

如果你已经完成了,你应该自己删除它:

git branch -d feature
如果有一些提交将变得“不可访问”,这将给您一条错误消息。如果确实要删除,但您确实确定要删除,请使用大写D删除:

git branch -D feature
还是要删除它。要小心,因为这里的输入错误删除了错误的内容,可能会导致恢复内容的几个小时


编辑以添加,根据原始发布上的注释:如果您希望自动删除具有上游集的本地分支,但上游本身已消失,则需要脚本来完成此操作。像这样的东西(完全未经测试)可能会起作用:

#! /bin/sh

git for-each-ref --format '%(refname:short)' refs/heads |
while read branch; do
    # $branch is the local branch, see if it has an upstream configured
    remote=$(git config --get branch.$branch.remote) || continue
    upstream=$(git config --get branch.$branch.merge) || continue
    # $branch is configured with an upstream
    [ "$remote" = "." ] && continue # upstream is local: skip

    # If remote branch still exists, skip this local branch.
    # Note: assumes remote.$remote.fetch = +refs/heads/*:refs/remotes/$remote/*
    # We could try to parse remote.$remote.fetch lines but that is too hard
    # for me to just type in as a throwaway script on SO.
    git rev-parse -q --verify $remote/$upstream >/dev/null && continue
    echo "$branch is configured to track $remote/$upstream but that's gone"
    echo "I'll try a safe delete here"
    git branch -d $branch
done

(我不会在这里使用
git branch-D
,这太危险了。)

我发现了一些可以删除所有过时分支的东西:

git branch --merged | xargs git branch -d

git branch-d branchToRemove
我想同时删除没有远程计数器部件的本地分支。我们目前有30-40个分支,所以逐个删除需要一些努力。我用一个脚本(未测试)更新了我的答案,该脚本可能用于自动删除此类本地分支。