2013-03-31 39 views
0

我对git比较陌生。我使用bitbucket作为我的远程存储库。在尝试将所有分支转换为标签之后,我处于一种混乱的情况。我处于一个状态,在bitbucket上我有与分支名称相同的标签。我想删除多余的远程分支。重命名本地不存在的远程分支

在本地,我有我想要的:

> git branch 
* master 

> git tag 
1.1.0 
1.2.0 
1.3.0 
1.3.1 
1.3.2 
2.0.1 

到目前为止好。

在到位桶,但是,我有:

分支:

1.1.0 
1.2.0 
1.3.0 
1.3.1 
1.3.2 
2.0.1 
master 

标签:

1.1.0 
1.2.0 
1.3.0 
1.3.1 
1.3.2 
2.0.1 

我想删除除主所有远程分支。我该怎么做呢?

谢谢。

回答

1

要删除任何被命名为“主”,在远程仓库你推什么给它—例如远程对象,

git push origin :master 

将删除。

现在的事实是,这里的“主人”只是一个快捷键,该参考文件的全名是“refs/heads/master”。标签位于“refs/tags”命名空间中,因此如果您碰巧在远程存储库中同时拥有分支和名为“foo”的标签,则可以使用要删除的对象的全名来消除任何歧义。

血淋淋的细节描述在gitrevisions(7) manual page

所以,删除所有远程分支机构,除了主人,你必须做这样的事情:

git push origin :refs/heads/1.1.0 :refs/heads/1.2.0 ... 

您可以尝试通过使用一个小壳的黑客攻击,使这个少乏味:

$ (while read b; do echo :refs/heads/$b; done | xargs git push origin) 
1.1.0 
1.2.0 
1.3.0 
1.3.1 
1.3.2 
2.0.1 
^D 

(^ D这里的意思是按ctrl-d来标示子壳的输入结束)。


P.S. 顺便说一句,我认为,由于获取的Git支持通配符refspecs时,像

git fetch origin '+refs/heads/*:refs/heads/*' 

,将用于推动工作,太。但好像它不—至少

git push origin ':refs/tags/*' 

似乎不适合我使用Git 1.8.1工作。

0

的语法来删除远程分支/标签:

git push REMOTE_NAME :BRANCH_NAME 

我真的不知道,如果标签或分支机构有偏好,如果他们有相同的名称。

所以更具体,你可以指定它是使用refs/heads的Refspec符的一个分支:

git push REMOTE_NAME :refs/heads/BRANCH_NAME 

假设您的远程名为origin,这个命令应该删除你提到的所有分支:

for branch_name in 1.1.0 1.2.0 1.3.0 1.3.1 1.3.2 2.0.1; do 
    git push origin :refs/heads/$branch_name 
done 
+0

是的,意识到并编辑我的答案就在您发布评论之前。 – Tuxdude

2
git branch -m old_branch new_branch   # Rename branch locally  
git push origin :old_branch     # Delete the old branch  
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote 
相关问题