Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 删除本地不存在的远程分支_Git - Fatal编程技术网

Git 删除本地不存在的远程分支

Git 删除本地不存在的远程分支,git,Git,假设我独自工作,并且我只使用Remote作为代码备份解决方案。有时我可能会删除本地分支 我知道我可以使用git push origin删除远程上的特定分支--delete mybranch,但是有没有一种方法可以删除本地不存在的所有远程分支,而不必手动检查本地不存在的分支 有时脱机工作时,我会合并分支,然后删除旧的(合并的)分支 最好在网上进行,因为您可以通过以下方式进行跟进: 但是,由于您在本地(脱机)删除了分支,因此在联机时,您需要从GitHub获取--prune远程分支,检查它们的本地对应

假设我独自工作,并且我只使用Remote作为代码备份解决方案。有时我可能会删除本地分支

我知道我可以使用git push origin删除远程上的特定分支--delete mybranch,但是有没有一种方法可以删除本地不存在的所有远程分支,而不必手动检查本地不存在的分支

有时脱机工作时,我会合并分支,然后删除旧的(合并的)分支

最好在网上进行,因为您可以通过以下方式进行跟进:

但是,由于您在本地(脱机)删除了分支,因此在联机时,您需要
从GitHub获取--prune
远程分支,检查它们的本地对应项是否存在,否则需要
推--delete

使用以列出这些远程分支的简短名称:

 git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin
您可以检查是否有

因此,您可以轻松地将两者结合起来

git fetch --prune
for branch in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin); do
    if ! git show-ref --quiet refs/heads/${branch}; then
        echo "delete remote branch '${branch}'"
        git push origin --delete ${branch} 
    fi
done

只要写一个脚本就可以了。对每个ref使用
git
(从
git fetch--prune
开始更新git的远程跟踪分支)。@torek是正确的,这可能是最好的方法,但你引起了我的兴趣,因为这与一般做法截然相反,您不想保留代码的用例是什么?@LightBender I通常先进行本地提交,然后将所有分支推送到远程。有时脱机工作时,我会合并分支,然后删除旧的(合并的)分支。但是,旧的(合并的)分支仍将存在于远程服务器上。我正在寻找保持本地和远程在这种工作流中同步的方法。更有意义的是,您使用的远程设备是什么?@LightBender当前正在使用GitHub remotes。
if git show-ref --quiet refs/heads/develop; then
    echo develop branch exists
fi
git fetch --prune
for branch in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin); do
    if ! git show-ref --quiet refs/heads/${branch}; then
        echo "delete remote branch '${branch}'"
        git push origin --delete ${branch} 
    fi
done