2017-09-01 91 views
2

假设我单独工作,并且只使用遥控器作为代码备份解决方案。有时我可能会删除当地分行。删除本地不存在的远程分支

我知道我可以用git push origin --delete mybranch删除远程的特定分支,但是有没有办法删除本地不存在的所有远程分支,而无需手动检查本地不存在的分支?

+1

只要写一个脚本来做到这一点。使用'git for-each-ref'(以'git fetch --prune'开头来更新你的Git的远程跟踪分支)。 – torek

+0

@torek是正确的,这可能是最好的方法,但是你激发了我的兴趣,因为这是一般惯例的极端相反,你的用例是什么,你不想保留代码? – LightBender

+0

@LightBender我通常会进行本地提交,然后将所有分支推送到远程。有时在离线工作时,我合并分支,然后删除旧的(合并的)分支。但是,旧的(合并的)分支仍然存在于遥控器上。我正在寻找保持本地和远程同步这种工作流程的方法。 – Flux

回答

1

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

最好是这样做网上,你可以用push --delete, as in this answer跟进:

git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin 

但既然你本地删除你的分支(离线),你需要的时候在网上,到fetch --prune的来自GitHub的远程分支,检查他们的本地对应方是否存在,否则push --delete

使用git for-each-ref with the refname:lstrip=3 format为了列出这些远程分支机构的短名称:

git for-each-ref --format='%(refname:lstrip=3)' refs/remotes/origin 

您可以检查是否有local branch does existsgit show-ref --quiet

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 
相关问题