删除已提交的git分支

删除已提交的git分支,git,workflow,git-svn,Git,Workflow,Git Svn,我的常规模式是从master分支,做大量工作,然后重新设置基址并git svn dcommit。我怎样才能清理我所有的旧树枝 基本上,我想在消息和git branch-D中找到任何具有git svn id:的分支 注意:git分支--没有颜色--没有音轨--合并让我得到了大部分的帮助,但是如果我遇到需要一个git fetch-f(因为一个疯狂的git svn错误)的情况,我将不得不自己去重新设置所有分支的基础。类似于一句话: git for-each-ref --format='%(refnam

我的常规模式是从master分支,做大量工作,然后重新设置基址并
git svn dcommit
。我怎样才能清理我所有的旧树枝

基本上,我想在消息和
git branch-D
中找到任何具有
git svn id:
的分支

注意:
git分支--没有颜色--没有音轨--合并
让我得到了大部分的帮助,但是如果我遇到需要一个
git fetch-f
(因为一个疯狂的git svn错误)的情况,我将不得不自己去重新设置所有分支的基础。

类似于一句话:

git for-each-ref --format='%(refname:short)' refs/heads |
while read branch; do
    if git show -s $branch | grep 'git-svn-id:'; then
        git branch -D $branch
    fi
done
注意,这是未经测试的;我没有使用git svn,它只是基于您问题第二段中的要求。您可以先尝试使用echo,而不是
git branch-D
,以确保分支列表与您期望的一样。我可以根据需要帮助改进它。

一种单行程序:

git for-each-ref --format='%(refname:short)' refs/heads |
while read branch; do
    if git show -s $branch | grep 'git-svn-id:'; then
        git branch -D $branch
    fi
done

注意,这是未经测试的;我没有使用git svn,它只是基于您问题第二段中的要求。您可以先尝试使用echo,而不是
git branch-D
,以确保分支列表与您期望的一样。我可以根据需要帮助改进它。

提交消息中的所有分支不都应该有git svn id:吗?或者你指的是最新的提交?是的,头部只有一个
git svn id
,如果它是正确的,那么我想这是一个使用批处理文件列出本地分支并检查它们的问题。我可能会单独进行删除,因为这相当危险。难道不是所有的分支在提交消息中都有git svn id:吗?或者你指的是最新的提交?是的,头部只有一个
git svn id
,如果它是正确的,那么我想这是一个使用批处理文件列出本地分支并检查它们的问题。我可能会单独删除,因为这是相当危险的完美工作。你能把它格式化成包含在.gitconfig中的格式吗?这样我就可以做
git gcbr
,它会清理我的分支吗?@PaulTarjan:真的有什么不寻常的东西,最好把它放在路径中一个名为
git gcbr
的脚本中,这样以后就可以阅读和编辑了。这也使得添加干跑/强制选项等操作变得更容易,以防您需要谨慎行事。(或者您可以让它回显分支名称、检查并将管道连接到
xargs git branch-D
),我想它工作得很好。你能把它格式化成包含在.gitconfig中的格式吗?这样我就可以做
git gcbr
,它会清理我的分支吗?@PaulTarjan:真的有什么不寻常的东西,最好把它放在路径中一个名为
git gcbr
的脚本中,这样以后就可以阅读和编辑了。这也使得添加干跑/强制选项等操作变得更容易,以防您需要谨慎行事。(或者您可以让它回显分支名称、inspect和管道到
xargs git branch-D
,我想)