Git 如何删除已完成要素的要素分支
如何删除已完成要素的要素分支 在我的本地机器上,当我运行“git branch”时,我仍然看到远程repo中不再存在的旧分支 我试着运行:“git fetch-p” 它说删除了一些分支,但当我运行“git branch”时,它们仍然存在 有没有一种方法可以用一个命令将它们全部删除?在git中,您有“分支”,它们是您自己的,也是您自己的;然后你就有了“远程分支”,尽管名称实际上是本地的,但它是根据你的git在与远程git联系时看到的分支创建和删除的,并问它:“嘿,你那边有什么分支?” 运行Git 如何删除已完成要素的要素分支,git,git-flow,Git,Git Flow,如何删除已完成要素的要素分支 在我的本地机器上,当我运行“git branch”时,我仍然看到远程repo中不再存在的旧分支 我试着运行:“git fetch-p” 它说删除了一些分支,但当我运行“git branch”时,它们仍然存在 有没有一种方法可以用一个命令将它们全部删除?在git中,您有“分支”,它们是您自己的,也是您自己的;然后你就有了“远程分支”,尽管名称实际上是本地的,但它是根据你的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个分支,所以逐个删除需要一些努力。我用一个脚本(未测试)更新了我的答案,该脚本可能用于自动删除此类本地分支。